본문 바로가기
Java

Autoboxing & Unboxing

by GGShin 2022. 5. 5.

지난번에 알아보았던 ArrayList 기억나시나요? ㅎㅎ

ArrayList를 생성하기 위해서는 <> 안에 type을 명시해주어야 했습니다. ArrayList<String> 이런 식으로 말이죠.

만약에 integer type을 담는 ArrayList를 만들고 싶다면 어떻게 해야할까요?

ArrayList<int> 아닐까요?

하지만 <> 안에는 class type이 들어가야 하기 때문에 위에 처럼 표시를 하게되면 에러가 발생합니다.

변수를 선언할 때 사용하던 int가 아닌 'Integer' 라는 class를 사용해주어야 합니다.

double, boolean, byte 등 primitive type에는 모두 "wrapper class"가 있습니다. (Class 여서 그런지 맨 앞 레터를 대문자로 표시하고 있습니다.)

Primitive type 별 Wrapper class-(출처)W3Schools

이렇게 primitive type value를 상응하는 wrapper class의 object로 변형시켜 주는 것Autoboxing이라고 합니다. 

ArrayList에는 int를 넣을 수는 없지만, Integer 라는 wrapper class를 이용해서 int value가 들어왔을 때 Java에서 자동으로 Integer로 바꾸어주는 것입니다. '감싸다'라는 뜻의 wrapping과 box안에 넣는다는 boxing이 서로 잘 어울리는 표현 같습니다. int 값을 Integer로 감싸주어 int 상태로는 갈 수 없는 곳들을 가게 만들어 주는 것이죠!

 

Wrapper class는 다음과 같이 사용할 수 있습니다.

 

1
Integer myInteger = 56;
cs

보통 int 생성할 때와 크게 다른 점이 없죠?

원래는 아래처럼 해주어야 하는데, 번거로운 코드를 생략하고 원하는 int 값만 넣어주면 java가 알아서 autoboxing 작업을 해줍니다. 

1
Integer myInteger = Integer.valueOf(54);
cs

또 다른 방법으로는 다른 class 생성 시와 동일한 방법으로 생성할 수도 있습니다.

1
Integer myInteger = new Integer(54);
cs

 

이와는 반대로 Integer를 int로 바꾸어 주는 작업을 Unboxing이라고 합니다. Wrapper class로 감싸주었던 것을 풀어주는, 상자에서 꺼내주는 행위라고 보면 될 것 같습니다. 

Unboxing 역시 아래처럼 간편하게 할 수 있습니다.

 

1
int myInt = myInteger;
cs

 

Unboxing 작업 역시 원래는 아래와 같이 .intValue() 라는 method를 명시해주어야 하지만, 생략해도 java가 알아서 해당 작업을 해줍니다.

 

1
int myInt = myInteger.intValue();
cs

 

예시는 모두 정수 타입으로 들었지만, 다른 primitive type도 위와 같이 활용이 가능합니다.

primitive type의 활용도를 상승시켜주는 autoboxing, unboxing 인 것 같습니다.

 

GFG에도 예시와 함께 설명이 잘 되어 있어서 자세한 내용이 필요하시면 한번 확인해보세요!

https://www.geeksforgeeks.org/autoboxing-unboxing-java/

 

Autoboxing and Unboxing in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

반응형