JAVA

9. Auto Boxing & UnBoxing

ggomjiu 2025. 3. 28. 14:18

Wrapper Class

: 기본 타입을 객체로 다루기 위해서 사용하는 클래스들

- 기본 자료형을 객체로 감싸서 사용할 수 있게 해주는 클래스

- 모든 기본 타입은 값을 갖는 객체를 생성

-> 이런 객체를 포장 객체라고 함

- 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없음

- 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 함

Integer num1 = new Integer(5); // 기본형 타입 정수를 래퍼 클래스로 감싸 객체화
Integer num1 = 5; // 이런식으로도 표현 가능
Double num2 = new Double(1.11); // 기본형 타입 실수를 래퍼 클래스로 감싸 객체화
Double num2 = 1.11;

  1. 컬렉션은 객체만 저장이 가능  -> 기본형은 못들어가고 래퍼 클래스를 사용해야 함
  2. null 사용 가능 -> 래퍼 클래스는 객체이므로 null이 가능

Boxing

: 기본 타입의 데이터 -> 래퍼 클래스의 인스턴스로 변환

 

UnBoxing

: 래퍼 클래스의 인스턴스에 저장된 값 -> 기본 타입의 데이터로 변환

 

  • 래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아님
  • 생성된 인스턴스의 값만을 참조할 수 있기 때문에 래퍼 클래스 인스턴스에 저장된 값을 직접 변경이 불가능
  • So, 래퍼 클래스를 언박싱한 뒤에 값을 변경한 뒤 박싱해야 하는 중간 단계를 거칠 필요가 있음
// 박싱
Integer num = new Integer(20);
// Integer 래퍼 클래스 num 에 20의 값을 저장

// 언박싱
(intValue) int n = num.intValue();
// 래퍼 클래스 num 의 값을 꺼내 가져온다.

// 재 포장
(박싱) n = n + 100; // 120 num = new Integer(n);

 

AutoBoxing & AutoUnBoxing

: 자동화된 Boxing & UnBoxing

- JDK1.5부터는 박싱과 언박싱이 필요한 상황에 자바 컴파일러가 자동으로 처리해주기 시작함

- 기본 타입 값을 직접 박싱, 언박싱하지 않아도 래퍼 클래스 변수에 대입만 하면 자동으로 박싱과 언박싱이 됨

- Auto Boxing이 반복적으로 이루어지면 애플리케이션의 성능에 영향을 미침

=> 100만건 기준으로 약 5배의 차이가 남

/* 기존 박싱 & 언박싱 */
Integer num = new Integer(17); // 박싱
int n = num.intValue(); // 언박싱

/* 오토 박싱 & 언박싱 */
Integer num = 17; // new Integer() 생략
int n = num; // intValue() 생략

 

래퍼 클래스 동등 비교

- 오토 언박싱을 통해 객체 값을 더하고 빼고는 문제가 없지만, 객체 값을 비교를 할 때는 조심해야 함

- 인스턴스에 저장된 값에 대한 동등 여부 판단은 동등 연산자(==)으로는 값을 비교하는 게 아닌 객체의 주소값을 비교해서 의도적이지 않은 작동이 일어남

- 따라서 래퍼 클래스의 객체 값 비교는 포장 내부의 값을 얻어 비교해야 되기 때문에, 직접 언박싱해서 비교하던가, .equals() 메소드를 통해서 비교해야 함

- 래퍼 클래스와 기본 자료형과의 비교는 자동으로 오토박싱과 언박싱을 해주기 때문에 ==연산과 .equals()연산이 모두 가능함

 

자료형 변환 메소드

- 객체를 포장하는 기능 외에도, 래퍼 클래스는 자체 지원하는 parse타입() 메소드를 이용하여 데이터 타입을 형 변환할 때도 사용

String str = "10";
String str2 = "10.5";
String str3 = "true";

byte b = Byte.parseByte(str);
int i = Integer.parseInt(str);
short s = Short.parseShort(str);
long l = Long.parseLong(str);
float f = Float.parseFloat(str2);
double d = Double.parseDouble(str2);
boolean bool = Boolean.parseBoolean(str3);

 

 

 

 

 

 

 

 

 

 

- Reference

https://inpa.tistory.com/entry/JAVA-%E2%98%95-wrapper-class-Boxing-UnBoxing

'JAVA' 카테고리의 다른 글

11. Error & Exception 2  (0) 2025.04.17
10. Error & Exception 1  (0) 2025.04.16
8. Mutable & Immutable  (0) 2025.03.28
7. Call by Value vs Call by Reference  (0) 2025.03.28
6. Xms & Xmx  (0) 2025.03.28