Java Wrapper 클래스 를 정리해 보자
안드로이드 프로그래밍을 하다보면,
Wrapper Class를 사용하게 되는 경우가 많이 있습니다.
HashMap이나 Generic, 혹은 ArrayList를 사용할 때 인데요.
오늘은 Java의 WrapperClass에 대해서 정리해보겠습니다.
1. Wrapper Class
Java 개발을 할 때, 무심코 사용하던 Wrapper Class란 말은,
사실은 기본형(Primitive) 타입을 Wrap해서 쓰는,
Primitive Wrapper Class를 지칭한다고 볼 수 있습니다.
실제로 Wrapper Class는, Primitive Wrapper Class뿐만이 아니라,
어떤 Class를 Wrap(포장)해서 사용하는 Class를 가르키는 것 입니다.
하지만, 이 글에서도, Wrapper Class를,
자바의 Primitive Wrapper Class로 보고 정리해보겠습니다.
그러면, Java에서 Wrapper Class는 언제 사용할까요?
기본형타입이라고 하는 Primitive Type(int, char 등등)이 객체형 으로 사용되어야 하는 경우에 사용합니다.
위에서 예를 들었던, HashMap이나 Generic등을 사용할 때 를 실제적인 예로 들 수 있겠네요.
Wrapper Class는 기본형 타입의 데이터를 인자로 받아들여서,
객체를 생성하여 해당 Wrapper Class가 가진 메소드들을 사용할 수 있도록 해줍니다.
(구체적인 코드는 아래에서 보도록 하겠습니다.)
Wrapper Class들의 종류와 생성자에 들어가는 인자들은 아래표로 확인해 주세요.
Wrapper Class
기본형 | 래퍼 클래스 | 생성자 의 인자 |
byte | Byte | byte 또는 String |
short | Short | short 또는 String |
int | Integer | int 또는 String |
long | Long | long 또는 String |
float | Float | float, double 또는 String |
double | Double | double 또는 String |
char | Character | char |
boolean | Boolean | boolean 또는 String |
그럼, 실제로 약간의 코딩을 해보겠습니다.
기본형인 int 타입을, 래퍼클래스의 인자로 넣어서 객체로 만들고,
에디터의 도움을 받아서 선택할 수 있는 메소드들을 보면 다음과 같은데요.
그냥 기본형인 int 8일때보다, 메소드를 이용해 활용할 수 있는 방법이 매우 늘어났다고 볼 수 있겠네요.
게다가, 객체형을 요구하는 Generic같은 곳에도 대응이 가능하고 말이지요.
활용범위가 늘어났다고 할 수도 있겠구요.
(아래의 메소드들중에는, 가장 많이 사용하는 메소드중 하나가 toString() 아닌가 싶네요.)
String으로 값을 받아서, Integer값으로 변환해서 사용하는 경우도 많이 있는데요.,
이 경우에는 Integer.valueOf()라는 메소드를 사용합니다.
아래와 같이 valueOf()라는 메소드는, Integer 타입의 객체를 반환해 줍니다.
한가지 흥미로운 것은, WrapperClass들이 가지고 있는, parse로 시작하는 메소드들인데요.
이 메소드는 객체형이 아닌, 기본형(Primitive)를 반환해 줍니다.
아래와 같이, parseInt를 사용하면, 반환되는 타입은 기본형 타입인 int인데요.
그래서, Wrapper Class타입의 객체형에서 사용했던 메소드들도, 아래와 같이 사용할 수 없습니다.
2. AutoBoxing / UnBoxing
자바 SDK1.5부터는, Autoboxing / Unboxing 이라는 개념이 생겼는데요.
기본형과 객체형을 자동으로 변환해주어서,
저희가 해줘야 일을, SDK가 내부적으로 실행해주기 때문에
매우 편리합니다.
아래와 같이, valueOf()를 사용하지 않았는데도, 반환되는 타입을 Integer로 명시한 것만으로도,
자동으로 Wrapping을 해줘서, 객체로 변환되 메소드를 사용할 수 있게 해 준것이구요.
이것을 AutoBoxing이라고 합니다.
(개인적으로는, AutoWrapping이라고 했으면, 더 이해하기 쉬웠을 것 같기도 한데요.)
반대로, 아래와 같이, parseInt없이도,
return Type을 기본형으로 선언한 것 만으로도, 형변환이 오류없이, 자동으로 되는 것을 알 수 있습니다.
이것을 UnBoxing이라고 합니다.