자바(Java) 박싱(Boxing)

유필선·2024년 3월 17일
0

자바(Java)

목록 보기
15/20

박싱이란 ?

박싱은 원시타입의 값을 해당하는 래퍼 클래스의 객체로 변환하는 것을 말한다.

각각의 원시 타입에는 해당하는 래퍼 클래스가 있어서 그 원시 타입의 값을 객체로 다룰 때 사용하는 것이 박싱이다.

래퍼 클래스(Wrapper class)

프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 있다.
예를 들어, 메소드의 인수로 객체 타입만이 요구되면, 기본 타입의 데이터를 그대로 사용할 수 없다.
이때 기본 타입의 데이터를 먼저 객체로 변환한 후 작업을 수행해야한다.

자바의 기본 타입에 대응하여 자바에서 제공하고 있는 래퍼 클래스는 아래와 같다.

박싱(Boxing) , 언박싱(UnBoxing)

래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니므로, 인스턴스에 저장된 값을 변경할 수 없다.
값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값만을 참조할 수 있다.

  • 기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환하는 과정을 박싱(Boxing)
  • 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입의 데이터로 꺼내는 과정을 언박싱(UnBoxing)

오토 박싱(AutoBoxing) , 오토 언박싱(AutoUnBoxing)

JDK 1.5부터 박싱과 언박싱이 필요한 상황에서 자바 컴파일러가 이를 자동으로 처리해준다
이렇게 자동화된 박싱과 언박싱을 오토 박싱과 오토 언박싱 이라고 부른다.

  • 오토박싱을 이용하면 new 키워드를 사용하지 않고도 자동으로 인스턴스를 생성할 수 있다.

주의할 점

자동 박싱과 언박싱은 코드를 간결하게 해주는 장점이 있다. 하지만 다음의 문제들이 발생할 수 있다.

  • 박싱된 값은 원시 타입에 비해 더 많은 메모리를 차지하며, 시간을 소요하는 문제가 있다.
  • 래퍼 클래스의 경우 'null'값을 가질 수 있지만, 원시타입의 경우 null값을 가질 수 없어서 타입을 변환하는 과정에서 'NullPointerException'이 발생한다.
Integer i = null;
int Autobox_i = i; // NullPointerException 발생.
System.out.println(Autobox_i);  
  • ==연산자 사용 시 주의
    원시 타입을 비교할 때는 '==' 연산자가 값을 비교하지만, 래퍼 클래스를 비교할 때는 '=='가 참조를 비교한다. 참조하는 메모리 영역이 같은 것인지를 비교하기 때문에 두 래퍼 객체의 값을 비교할 때 'equals()' 메서드를 사용한다.
Integer a = 200;
Integer b = 200;
System.out.println(a == b); // 출력: false
Integer c = 100;
Integer d = 100;
System.out.println(c == d); // 출력: true
  • 자바는 -128 ~ 127의 값을 내부적으로 Integer 객체를 재사용해서 메모리 영역에 할당하기 때문에 '=='연산으로 비교는 가능하지만 그 이상의 값은 새로운 메모리 영역을 생성하므로 '=='로 정확하게 비교할 수 없기 때문에 'equals()' 메서드를 사용한다.
profile
이해해버려라!

0개의 댓글