래퍼 클래스 ( Wrapper class )
8개의 기본 타입의 데이터를 객체로 포장해 주는 클래스를 래퍼클래스라고 한다.
래퍼 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만들어 준다.
래퍼 클래스는 모두 java.lang 패키지에 포함되어 제공된다.
프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우에 사용됩니다.
예를 들어, 메소드의 인수로 객체 타입만을 요구하면, 기본 타입의 데이터를 객체로 변환한 후 작업을 수행해야 하는데 이 때 래퍼 클래스가 사용됩니다.
자바의 기본타입에 대응하는 래퍼 클래스
기본 타입 | 래퍼 클래스 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
박싱( Boxing ) 과 언박싱( UnBoxing )
기본타입의 데이터를 래퍼 클래스의 인스턴스로 변환하는 과정을 박싱 이라고 한다.
반대로 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정을 언박싱 이라고 한다.
래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니므로, 인스턴스에 저장된 값을 변경할 수 없다.
단지 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값만을 참조할 수 있다.
오토박싱(Auto Boxing)과 오토언박싱(Auto UnBoxing)
JDK 1.5부터는 박싱과 언박싱을 자바 컴파일러가 자동으로 처리해준다.
이렇게 자동화된 박싱과 언박싱을 오토박싱, 오토언박싱이라고 부른다.
Integer num = new Integer(17); // 박싱
int n = num.intValue(); // 언박싱
Character ch = 'X'; // Character ch = new Character('X'); 오토박싱
char c = ch; // char c = ch.charValue(); 오토언박싱
오토박싱, 오토언박싱을 사용하면 메소드를 사용하지 않고 작업을 처리할 수 있다.
오토박싱, 오토언박싱을 통해 기본타입과 래퍼클래스 간의 다양한 연산도 가능해 진다.
Integer num1 = new Integer(7);
Integer num2 = 3;
int int1 = 5;
int int2 = 2;
Integer result1 = num1 + num2;
Integer result2 = int1 - int2;
int result3 = num1 * int2;
래퍼 클래스와 기본타입의 비교 연산도 가능하지만 동등 연산자(==)는 안된다. 대신 equals() 메소드를 사용해야 한다.
래퍼 클래스도 객체이므로 동등 연산자(==)를 사용하면, 두 인스턴스의 값을 비교하는게 아니라 두 인스턴스의 주소값을 비교하기 때문이다.
Integer num1 = new Integer(10);
Integer num2 = new Integer(20);
Integer num3 = new Integer(10);
System.out.println(num1 < num2); // true
System.out.println(num1 == num3); // false
System.out.println(num1.equals(num3)); // true
참조