<aside>
</aside>
Java 에는 기본 타입(Primitive Type)과 참조 타입(Reference Type)이 있다. 프로그래밍을 하다 보면 기본 타입 → 참조 타입으로 바꿔야하거나 참조 타입만 써야하는 경우가 있다.
예를 들어 메서드의 인수로 객체 타입만이 요구될 때이다.
// 인자로 참조형만 받을 때
public Integer sayAge(Integer age) {
return age;
}
// 제네릭 파라미터는 참조형만 가능하다.
@FunctionalInterface
public interface Comparator<T> {
...
}
멀티스레드 환경에서 동기화 데이터를 사용할 땐 참조 타입만 가능하기도 하다.
Object lock = new Object();
...
synchronized(lock) {
...
}
이럴 때 기본 타입을 객체로 다루기 위해 필요한 클래스가 래퍼 클래스이다. 자바는 모든 기본 타입을 객체로 바꿀 수 있다. 이러한 객체를 포장 객체라고도 한다.
포장 물건을 바꿀 수 없듯이, 래퍼 클래스로 감싸고 있는 기본 타입 값은 수정할 수 없다. java9 이전에는 new
키워드를 사용했지만, java9 이후에는 단순히 참조 클래스로 래퍼 클래스를 선언하면 된다.
// java9 이전
Integer int = new Integer(4);
// java9 이후
Integer int = 4;
이름에서도 유추할 수 있듯이 두 용어의 차이점은 다음과 같다.
박싱 : 기본 타입의 데이터 → 래퍼 클래스의 인스턴스 언박싱 : 래퍼 클래스의 인스턴스 → 기본 타입의 데이터