Programming/Java

[Java] 래퍼 클래스와 박싱, 언박싱에 대해 알아보자

cbw1030 2020. 10. 28. 22:45
반응형

안녕하세요! 이번 포스팅은 래퍼클래스, 박싱, 언박싱에 대해 알아보겠습니다.

 

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번처럼 기본형을 사용하는게 낫습니다.

래퍼 클래스는 꼭 필요한 컬렉션에서 사용하면 될 것 같습니다.

반응형