[Java] 오토 박싱 & 오토 언박싱

giggle·2023년 8월 29일
0

📌 Wrapper 클래스란?

Wrapper 클래스는 자바의 기본 데이터 타입을 객체로 다루기 위해 제공되는 클래스입니다. 기본 데이터 타입은 int, char, boolean등이 있고, 이러한 데이터 타입을 객체로 다루어야 할 때 Wrapper 클래스를 사용합니다.

특징

  1. Wrapper 클래스는 기본 데이터 타입을 Object로 변환할 수 있습니다. 메소드에 전달된 인수를 수정하려는 경우 오브젝트가 필요합니다. (기본 유형은 값에 의한 변경 Object는 참조에 의한 변경이기 때문이다.)
  2. java.util 패키지의 클래스는 객체만 처리하므로 Wrapper class는 이 경우에도 도움이 됩니다.
  3. ArrayList 등과 같은 Collection 프레임 워크의 데이터 구조는 기본 타입이 아닌 객체만 저장하게 되고 Wrapper Class를 사용하여 오토 박싱과 언박싱이 일어납니다.
  4. 멀티스레딩에서 동기화를 지원하려면 객체가 필요합니다.

기본 타입과 Wrapper 클래스

기본 타입 : int, long, float, double, boolean 등
Wrapper 클래스 : Integer, Long, Float, Double, Boolean 등

📌 오토 박싱

오토박싱은 기본 데이터 타입의 값을 해당하는 Wrapper 클래스 객체로 자동 변환하는 것을 말합니다. 이는 컴파일러가 자동으로 처리해주므로 개발자가 명시적인 변환을 직접 작성하지 않아도 됩니다.

예시

int num = 10;
Integer integerObj = num; // 오토박싱

📌 오토 언박싱

언박싱은 Wrapper 클래스 객체를 해당하는 기본 데이터 타입의 값으로 자동 변환하는 것을 말합니다. 마찬가지로 컴파일러가 자동으로 처리해주므로 명시적인 변환을 작성하지 않아도 됩니다.

예시

Integer integerObj = 20;
int num1 = integerObj; // 언박싱
int num2 = integerObj.intValue();

정리

JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱이 필요한 상황에 자동으로 처리를 해줍니다.

편의성을 위해 오토 박싱과 언박싱이 제공되고 있지만, 내부적으로 추가 연산 작업이 거치게 됩니다. 따라서, 오토 박싱&언박싱이 일어나지 않도록 동일한 타입 연산이 이루어지도록 구현해야합니다.

실제로 100만건 기준으로 약 5배의 성능 차이가 납니다. 따라서 서비스를 개발하면서 불필요한 오토 박싱(캐스팅)이 일어나는 지 확인하는 습관을 가져야합니다.


참고


피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.

0개의 댓글