Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 래퍼 클래스(Wrapper Class)란? 필요한 이유와 오토박싱·언박싱 완벽 정리

래퍼 클래스(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;처럼 명시적 변환 없이도 자동으로 박싱이 일어납니다.