지난번에 알아보았던 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 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에도 예시와 함께 설명이 잘 되어 있어서 자세한 내용이 필요하시면 한번 확인해보세요!
'Java' 카테고리의 다른 글
Inner class 알아보기 (0) | 2022.05.09 |
---|---|
Interface(인터페이스) 알아보기(1) (0) | 2022.05.07 |
Array-배열 (0) | 2022.05.02 |
Class(7)-Up-casting & Down-casting (형변환 업캐스팅, 다운캐스팅) (2) | 2022.05.01 |
Class(6)-Polymorphism(다형성) (0) | 2022.04.29 |