래퍼 클래스(Wrapper Class)란?
래퍼 클래스는 기본 데이터 타입(primitive data type)(int, char, short, byte 등)을 감싸는 클래스입니다. 다시 말해, 자바에서 기본 데이터 타입을 객체(object) 형태로 다룰 수 있게 해주는 클래스입니다. 래퍼 클래스들은 java.lang 패키지에 포함되어 있으며, 대표적으로 Integer, Character, Short, Byte 등이 있습니다.
래퍼 클래스가 필요한 이유
- 래퍼 클래스는 기본 데이터 타입을 객체로 변환합니다. 메서드에 전달된 인자를 수정하고 싶다면 객체가 필요합니다. 기본 타입은 값에 의해 전달(pass by value)되어 원본 값이 변경되지 않기 때문입니다.
- java.util 패키지의 클래스들은 객체만 다루므로, 이런 경우에도 래퍼 클래스가 유용하게 사용됩니다.
- 컬렉션 프레임워크의 ArrayList, Vector 같은 자료구조는 객체(참조 타입)만 저장할 수 있으며, 기본 타입은 직접 저장할 수 없습니다.
- 멀티스레딩 환경에서 동기화(synchronization)를 지원하려면 객체가 필요합니다.
- 제네릭(Generic)에서도 기본 타입을 사용할 수 없기 때문에, List<Integer>처럼 반드시 래퍼 클래스를 사용해야 합니다.
자바에서 래퍼 클래스 활용하기
오토박싱(Autoboxing)
오토박싱은 기본 데이터 타입을 그에 대응하는 래퍼 객체로 자동 변환하는 기능입니다.
예제
public class AutoBoxingTest {
public static void main(String args[]) {
int num = 10; // int 기본 타입
Integer obj = Integer.valueOf(num); // 래퍼 클래스 객체 생성
System.out.println(num + " " + obj);
}
}실행 결과
10 10
언박싱(Unboxing)
언박싱은 래퍼 클래스 객체를 그에 대응하는 기본 데이터 타입으로 변환하는 기능입니다.
예제
public class UnboxingTest {
public static void main(String args[]) {
Integer obj = new Integer(10); // 래퍼 클래스 객체 생성
int num = obj.intValue(); // 래퍼 객체를 기본 타입으로 변환
System.out.println(num + " " + obj);
}
}실행 결과
10 10
참고: Java 9부터 new Integer(10)처럼 생성자를 사용하는 방식은 deprecated(사용 중단 권고)되었으므로, Integer.valueOf(10)를 사용하는 것이 좋습니다. 또한 오토박싱 덕분에 Integer obj = num;처럼 명시적 변환 없이도 자동으로 박싱이 일어납니다.