본문 바로가기

컴퓨터공학/Java

CS> autoboxing 과 unboxing은 무엇인가?

 자바에는 크게 두 가지 데이터 타입이 있다.

Primitive Data 와 Wrapper Class 이다. 

 


여기서 잠깐 Primitive data를 복습하자..

 

primitive Type 기본형 타입이다. 

기본값이 있기 때문에 Null은 존재하지 않는다. 

만약 기본형 타입에 Null을 넣고 싶으면 Wrapper Class를 이용한다.

가벼운 데이터

실제 값을 저장하는 곳으로 Stack 메모리를 이용한다.

 

 

추가로 Reference Type은 

빈 객체를 의미하는 Null이 존재한다. 

값이 저장되어 있는 주소값을 저장하는 곳으로 실제 메모리는 Heap 메모리에 저장되고 주소값은 스택 메모리에 저장된다.

배열, 열거, 클래스, 인터페이스


 

다시 원래대로 돌아와서

Primitive : Boolean, char, byte, short, int, long, float, double

Wrapper : Boolean, Character, Byte, Short, Integer, Long, Float, Double

 

Primitive Data 와 Object Data 가 존재한다.

Object data는 Reference type으로 지정한다. 

Primitive Data와 Object Data는 노는 물이 달라서 호환이 안 된다.

그래서 Wrapper Class를 통해 Primitive Data를 Object Data화 한다.

 

 

J2SE 5 이전에는 직접 명시하여 데이터 타입을 바꿔야했다.

그러나 J2SE 5 이후에는 

자동으로 Primitive Data와

Wrapper Class로 생성된 Object Data가

서로 직접 호환이 가능해졌다.

 

 

Autoboxing

compiler가 primitive data 를 Object data 로 자동으로 변환시키는 것

예를 들어서 24값을 가진 int를 24값을 가진 Integer object로 변환한다.

primitive data는 

int a = 24 ; 이런 식으로 표시하지만

object data는

Integer b = new Integer(a) ; 

이렇게 객체로 만든다.

 

J2SE 5 이후로는

Integer b = a ;

이렇게 써도 된다.

 

Unboxing

 

unboxing은 반대로

 

J2SE 5 이전에는 

Integer a = new Integer(24);

int b = a.intValue();

이렇게 직접 만들어서 사용했지만

 

이후에는

Integer a = new Integer(24);

int b= a;

이렇게만 해도 된다.

 

 

 

정리

autoboxing 은 primitive data를 wrapper object로 변환하는 과정

가벼운 것을 무거운 것으로 바꾸니 boxing하는 것으로 이해

unboxing은 wrapper object 를 primitive data로 변환하는 과정

무거운 것을 가벼운 것으로 바꿔야하니 unboxing 한다고 이해하자

 

이 기능은 깔끔하고 이해가 빠른 코드를 작성할 수 있다.