[Java] 래퍼 클래스와 박싱, 언박싱에 대해 알아보자
안녕하세요! 이번 포스팅은 래퍼클래스, 박싱, 언박싱에 대해 알아보겠습니다.
1. 래퍼 클래스(Wrapper Class)
List<String> list = new ArrayList<>();
위의 자바 코드를 보면 < > 제네릭을 사용하고 있습니다.
제네릭 타입에는 원하는 자료형을 지정할 수 있는데 기본 자료형인 원시형은 넣지 못합니다.
제네릭 타입에 넣기 위해서는 원시형(기본형)을 담아낼 수 있는 클래스를 넣어야 합니다.
즉, 원시형(Primitive Type)을 객체화한 것을 넣어야 하는데 이를 래퍼 클래스(Wrapper Class)라고 합니다.
래퍼 클래스의 종류는 다음과 같습니다.
Boolean |
Character |
Double |
Float |
Integer |
Long |
Short |
Byte |
Boolean 래퍼 클래스는 boolean 자료형을 객체화한 것이고 나머지도 이와 동일합니다.
* 래퍼 클래스 중에서 Character 클래스와 Integer 클래스만이 자신의 기본 타입과 이름이 다릅니다.
2. 박싱(Boxing)
박싱(Boxing)은 원시형(Primitive Type)을 래퍼 클래스로 바꾸는 것을 의미합니다.
Integer x = new Integer(3); // 박싱
위의 소스코드는 기본형 3을 래퍼 클래스로 박싱한 상태입니다.
그런데 이렇게도 가능합니다.
Integer x = 3; // 오토 박싱
이러한 상태를 오토 박싱(Auto-Boxing)이라 합니다. 컴파일러가 자동으로 정수 3을 new Integer(3)으로 바꿔주고 있습니다.
오토 박싱을 사용하면 new 키워드를 사용하는 번거로움을 줄일 수 있기 때문에 만약 박싱이 필요하다면 오토 박싱을 권장합니다. 몇 자라도 소스코드를 줄이는게 좋잖아요?^^
3. 언박싱(UnBoxing)
래퍼 클래스를 원시형(Primitive Type)으로 바꾸는 것을 의미합니다.
Integer x = new Integer(3); // 박싱
int x2 = x.intValue(); // 언박싱
래퍼 클래스를 intValue( ) 메서드를 사용하여 기본형으로 변환하고 x2라는 기본형 변수에 대입했습니다.
이를 언박싱이라 합니다.
intValue( )처럼 Value 앞에 기본 자료형을 붙여주면 언박싱이 가능합니다. ex) booleanValue( );
그리고 오토 박싱과 마찬가지로 오토 언박싱 또한 존재합니다.
Integer x = new Integer(3); // 박싱
int x2 = x; // 오토 언박싱
내부적으로 컴파일러가 자동으로 언박싱을 해주고 있는 상태입니다.
다음과 같은 소스코드가 있습니다. 어느 것이 메모리를 더 많이 차지할까요?
Integer x = 3; // 1번
int x = 3; // 2번
1번 소스코드가 메모리를 더 많이 차지합니다. 오토 박싱이지만 내부적으로 new Integer(3)을 생성하기 때문입니다.
오늘 포스팅의 결론은 기본형(원시형)과 래퍼 클래스를 둘 다 사용할 수 있는 경우라면 소스코드 2번처럼 기본형을 사용하는게 낫습니다.
래퍼 클래스는 꼭 필요한 컬렉션에서 사용하면 될 것 같습니다.