아무 생각 없이 ArrayList나 Map을 선언할 때 사용했던
Integer, Long 등등...
그냥 이렇게 사용하는 건가보다~ 하고만 있었지
이걸 왜 써야 하는지, 왜 필요한지는 생각해보질 않았다!
내일배움캠프 Java 문법 강의를 들으며, Wrapper Class
에 대해서 간단하게 이야기해주셔서 이 부분에 대해서 더 알아보고 싶다는 생각을 하게 됐고! 그래서 쓱 정리해보려고 한다 :)
자바의 자료형은 크게 기본형과 참조형이 있다!
기본형 변수(Primitive Type)
- char, int, float, double, boolean 등
- byte 단위로 단일 공간에 자료를 저장
참조형 변수(Reference Type)
- String, Object, Array, List...
- class, inteface 등
- 단일 공간에 담을 수 없는 값들
- Heap에 자료를 저장해두고 그 주소를 '참조'해서 사용
프로그래밍을 하다 보면 기본형 변수를 객체로 다루기 위해서 사용하는 클래스들을 Wrapper Class라고 한다
"기본형 변수를 한번 랩핑(감싸주는) 변수"
기본 타입 | 래퍼 클래스 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Chracter |
boolean | Boolean |
-> int, char 제외하고 첫글자를 대문자로 바꾸면 됨!
int num = 5; //기본형 선언
Integer IntegerNum = num; //Wrapper Class로 감싸기
Object
로 변환할 수 있다. 메소드에 전달된 인수를 수정하려는 경우 오브젝트가 필요하다 (기본형 변수의 값에 의한 변경 Object는 참조에 의한 변경이기 때문)객체
만 처리하므로 Wrapper class를 사용해야 한다Boxing - UnBoxing
이 일어난다래퍼 클래스는 값을 포장하여 객체로 만드는 것이라고 했다.
하지만, 값을 더하거나 변환시켜야 할 필요가 생겼을 경우 포장을 다시 뜯을 필요가 있다.
이런 과정은 Boxing과 UnBoxing
이라고 한다.
//Boxing
Integer num = new Integer(10);
//UnBoxing
int n = num.intValue();
//재포장
n = n + 100;
num = new Integer(n);
Wrapper 타입의 클래스 언박싱 메소드
👉 (클래스 타입)Value()
ex) intValue(), longValue(), doubleValue()
JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱을 자동으로 처리해준다!
//기존의 Boxing, UnBoxing
Integer num = new Integer(20);
int n = num.intValue();
//AutoBoxing, AutoUnBoxing
Integer num = 20;
int n = num;
Wrapper Class는 연산을 위한 클래스가 아니기 때문에, AutoBoxing과 AutoUnBoxing을 이용해서 처리해야 한다!
Wrapper Class로 객체 값을 비교하는 것을 조심해야 한다
Integer num1 = 100;
Integer num2 = 100;
num1 == num2; //false
'==' 연산자는 값을 비교하는 것이 아닌, 객체의 주소값
을 비교하는 것이기 때문에 같은 100의 값을 저장해도 false가 나온다!
Integer num1 = 100;
Integer num2 = 200;
Integer num3 = 100;
num1 == num3 //false
num1.equals(num3) //true
자동으로 오토박싱과 오토언박싱을 해주기 때문에 == 연산과 equals 연산 모두 가능하다!