[Java] 래퍼클래스

우노구나·2025년 7월 30일

래퍼 클래스란?

자바의 래퍼 클래스(Wrapper Class)는 기본 자료형(primitive type)을 객체(object) 형태로 감싸는 클래스이다.
자바는 객체 지향 언어이기 때문에, 객체만 다룰 수 있는 상황(예: 컬렉션 프레임워크 등)에서 기본형을 객체로 감싸야 할 필요가 있음.

기본형(Primitive Type)래퍼 클래스(Wrapper Class)
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

주요 사용 목적

컬렉션 사용
컬렉션은 객체만 저장할 수 있으므로, int 같은 기본형은 직접 저장할 수 없음. Integer 등을 사용해야 함.

List<Integer> list = new ArrayList<>();
list.add(10); // 오토박싱 자동 적용

유틸리티 메서드 활용
Integer.parseInt(), Double.toString() 같은 메서드는 래퍼 클래스에서 제공함.

기본형 ↔ 객체 자동 변환 (오토박싱/언박싱)
자바 5부터는 자동으로 변환됨.

Integer x = 100;     // 오토방식 Integer x = new Intger.valueOf(100); 으로 처리됨 
int y = x;           // 언박싱 int y = x.intValue(); 로 처리됨

x++; 	//x = Integer.valueOf(x.intValue() + 1); 로 처리됨 래퍼 클래스의 불변성 때문에 x기존 힙에 있는 100의 주소가 아니라 새로운 101의 주소를 갖게 된다. 
y++; 	//스택에 있는 y값(100)이 101로 됨

System.out.println(x == y); // x.intValue() == y로 언박싱 됨

x = x *= 1; // x = Integer.valueOf(x.intValue() * 1); 로 처리됨. 힙에 새롭게 128을 만들고 해당 주소를 x가 갖게 되어 x가 갖고있던 주소값이 바뀐다...!

래퍼 클래스는 딱봐도 기본 자료형보다 처리과정이 복잡하다.(비용이 많이 든다.)
그렇기 때문에 반드시 래퍼 클래스를 사용해야하는 상황이 아니면 쓰지 않는게 좋다.


래퍼 클래스 캐싱

자바는 valueOf() 정적 팩토리 메서드를 사용할 때, 일부 숫자 값에 대해 기존 객체를 재사용함.
즉, 매번 새로운 객체를 생성하지 않고, 자주 사용되는 값들은 캐시에 저장해두고 공유한다.

래퍼 클래스캐싱 범위
Byte-128 ~ 127
Short-128 ~ 127
Integer-128 ~ 127
Long-128 ~ 127
Character0 ~ 127
Booleantrue, false (항상 캐싱)
Float / Double❌ 캐싱 안 함

예시

Integer a = 100;  // 캐싱 범위 내
Integer b = 100;
System.out.println(a == b); // true (같은 객체)

Integer c = 200;  // 캐싱 범위 밖
Integer d = 200;
System.out.println(c == d); // false (다른 객체)

System.out.println(c.equals(d)); // true (값은 같음)

래퍼 클래스 객체는 기본적으로 ==로 비교하면 주소값(참조값)을, equals()로 비교하면 실제 값을 비교한다.

profile
기술 블로그

0개의 댓글