Java

[Java]오토박싱과 언박싱(Autoboxing and Unboxing)

DevStory 2022. 6. 22.

오토박싱과 언박싱(Autoboxing and Unboxing)

오토박싱(Autoboxing)과 언박싱(Unboxing)은 Java 1.5 Version에 도입된 기능으로, 원시 타입(Primitive Type)에서 래퍼 클래스(Wrapper Class) 타입으로 또는 반대로 자동 변환하는 것을 말합니다.

원시 타입(Primitive Type) 래퍼 클래스(Wrapper Class)
boolean Boolean
byte Byte
short Short
int Integer
float Float
long Long
double Double
char Character

오토박싱

오토박싱은 원시 타입의 데이터를 해당 래퍼 클래스의 객체로 변환하는 것을 말합니다. 변환 과정에서 메모리의 동적 할당과 각 원시 타입에 대한 객체 초기화가 포함되며, 객체를 명시적으로 생성할 필요가 없습니다. 예를 들어 int를 Integer 클래스로 변환합니다.

int num = 10;

Integer intObj = num;

오토박싱 예제

오토박싱은 제네릭 컬렉션에 값을 추가하는 경우 유용합니다.

 

다음 예제는 Integer 타입의 ArrayList에 원시 타입인 int 타입의 값을 할당합니다.

public class Main {
  public static void main(String args[]) {
    ArrayList<Integer> intArrayList = new ArrayList<>();

    // 오토박싱
    intArrayList.add(10);
    intArrayList.add(15);
    intArrayList.add(20);

    System.out.println("intArrayList: " + intArrayList);
  }
}

실행 결과

intArrayList: [10, 15, 20]

위 예제에서 Integer 타입의 ArrayList를 생성했습니다. 따라서 Integer 타입의 객체만 가질 수 있습니다.

 

하지만, add() 메서드에 원시 타입의 값을 전달합니다. 오토박싱으로 인해 원시 타입의 값은 래퍼 클래스의 객체로 변환되어 Integer 타입의 ArrayList에 할당됩니다.


언박싱

언박싱은 래퍼 클래스를 원시 타입으로 변환하는 것을 말합니다. 예를 들어 Integer를 int로 변환합니다.

// 오토박싱
Integer intObj = 20;

// 언박싱
int num = intObj;

언박싱 예제

다음 예제는 Integer 타입의 ArrayList에서 첫 번째 요소를 int 타입의 변수에 할당합니다.

public class Main {
  public static void main(String args[]) {
    ArrayList<Integer> intArrayList = new ArrayList<>();

    // 오토박싱
    intArrayList.add(10);
    intArrayList.add(15);
    intArrayList.add(20);
    System.out.println("intArrayList: " + intArrayList);

    // 언박싱
    int num = intArrayList.get(0);
    System.out.println("num: " + num);
  }
}

실행 결과

intArrayList: [10, 15, 20]
num: 10

오토박싱과 언박싱 특징

  • 자동으로 타입 변환이 발생하므로 명시적으로 타입을 변환하지 않아도 됩니다.
  • 오토박싱은 코드에서 보이지 않지만 래퍼 클래스 객체에 값을 할당하기 위해 객체를 생성합니다. 편리한 기능이지만 성능이 저하되는 문제가 존재하므로 반복문에서 오토박싱을 사용하는 것은 좋은 소스코드가 아닙니다.
반응형

댓글