언어/Java

[Java] wrapper class

JJangGu 2019. 9. 17. 23:40

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