Java의 Wrapper 클래스 – 간단한 가이드
Source: Dev.to
래퍼 클래스란?
래퍼 클래스는 원시 데이터 타입을 객체로 변환하여, 원시 값을 객체 안에 “감싸는” 역할을 합니다.
| Primitive | Wrapper |
|---|---|
int | Integer |
char | Character |
double | Double |
boolean | Boolean |
왜 래퍼 클래스가 필요할까?
컬렉션은 객체만 다룰 수 있다
ArrayList와 같은 Java 컬렉션은 원시 타입을 저장할 수 없습니다.
// 허용되지 않음
ArrayList list;
// 허용됨
ArrayList list;
유틸리티 메서드
래퍼 클래스는 유용한 변환 메서드를 제공합니다.
int i = Integer.parseInt("123"); // String → int
Double d = Double.valueOf("10.5"); // String → Double
객체‑지향 기능
API, 프레임워크, 그리고 제네릭은 종종 원시 타입보다 객체를 요구합니다. 래퍼 클래스를 사용하면 객체‑지향 패러다임 안에서 작업할 수 있습니다.
자동 박싱(Autoboxing)과 언박싱(Unboxing)
Java는 원시 타입과 해당 래퍼 객체 사이를 자동으로 변환합니다.
- 자동 박싱(Autoboxing) – 원시 → 객체
- 언박싱(Unboxing) – 객체 → 원시
이 자동 변환 덕분에 코드를 더 깔끔하게 작성할 수 있고, 보일러플레이트 코드가 줄어듭니다.
래퍼 객체는 어디에 저장될까?
- 원시 값 – 스택에 저장됩니다.
- 래퍼 객체 – 힙에 저장됩니다.
- 레퍼런스 변수 – 스택에 저장되며 힙에 있는 객체를 가리킵니다.
Integer a = 10; // 'a' 레퍼런스는 스택에, Integer 객체는 힙에 저장됩니다.
Integer 캐싱
Java는 ‑128부터 127 사이의 값을 갖는 Integer 객체를 캐시합니다.
Integer x = 100;
Integer y = 100;
System.out.println(x == y); // true (같은 캐시된 객체)
이 범위를 벗어나는 값은 별개의 객체를 생성합니다.
Integer x = 200;
Integer y = 200;
System.out.println(x == y); // false (다른 객체)
마무리 생각
래퍼 클래스는 Java에서 필수적입니다. 원시 타입은 속도를 제공하지만, 래퍼는 컬렉션, API, 객체 기반 연산에 필요한 유연성을 제공합니다. 자동 박싱, 언박싱 및 메모리 동작을 이해하는 것은 특히 면접 준비에 있어 중요한 역량입니다.