Wrapper Class
래퍼(wrapper) 클래스란 자바의 기본형 변수를 객체로 다뤄야 할 때 사용된다. (기본형 8개는 객체로 다루지 않는다)
래퍼 클래스들은 객체생성 시에 생성자의 인자로 주어진 각 자료형에 알맞은 값을 내부적으로 저장하고 있고, 이에 관련된 여러 메서드가 정의되어있다.
기본형 | 래퍼클래스 | 생성자 | 예시 |
boolean | Boolean |
Boolean(boolean value) Boolean(String s) |
|
char | Character | Character(char value) | Character c = new Character('a'); |
byte | Byte |
Byte(byte value) Byte(String s) |
Byte 는 실제 사용 시 byte형의 범위 내에 있는 값을 넣어도 정수의 기본 자료형은 int이기 떄문에 byte로 변환해야 한다고 에러를 낸다. |
short | Short |
Short(short value) Short(String s) |
Byte 와 마찬가지로 정수의 기본자료형이 int이므로 short로 변환해야 에러 없이 사용가능하다. |
int | Integer |
Integer(int value) Integer(String s) |
|
long | Long |
Long(long value) Long(String s) |
|
float | Float |
Float(double value) Float(float value) Float(String s) |
|
double | Double |
Double(double value) Double(String s) |
표의 예시에서 볼 수 있듯이 valueOf( )를 사용하여 선언하였는데, java 1.9 버전부터 new를 사용하여 객체를 생성하는 것은 Deprecated 되었다.(wrapper class, 모든 new가 Deprecated 된 것이 아님)
(*Java에서는 다음과 같이 설명하고 있다.
It is rarely appropriate to use this constructor. The static factory valueOf( ) is generally a better choice, as it is likely to yield significantly better space and time performance.)
* 래퍼클래스는 모두 equals()가 오버라이딩되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다.
따라서 객체에 비교연산자를 사용하지 못하는데, 대신 compareTo( )를 제공하고 있다.
오토박싱 & 언박싱(autoboxing & unboxing)
JDK 1.5 이전에는 기본형과 참조형 간의 연산이 불가했기 때문에, 래퍼클래스로 기본형을 객체로 만든 후 연산해야 했다.
그러나 현재는 컴파일러가 자동으로 변환하는 코드를 넣어주어 기본형 값을 래퍼클래스의 객체로 변환하거나, 혹은 반대로 변환하는 것이 가능해졌다. 전자를 '오토박싱(autoboxing)' 후자를 '언박싱(unboxing)' 이라고 한다.
위의 코드에서 알 수 있듯이 ArrayList에 값을 넣을 때, 기본형 값이 오토박싱되어 래퍼클래스 객체로 변환하지 않아도 되며, 리스트의 값이 언박싱되어 기본형 값에 저장하는 것도 가능하다.
[참고 : Java의 정석]
'언어 > Java' 카테고리의 다른 글
[Java] JVM이란? (0) | 2019.09.25 |
---|---|
[Java] 변수 - 형변환(Casting) (0) | 2019.09.05 |
[Java] 변수 - 타입 (0) | 2019.09.04 |
[Java] 변수 - 선언과 초기화 (0) | 2019.09.04 |