728x90
1. Wrapper 클래스란?
Java에서 기본 자료형(int, double, char 등)을 객체로 다룰 수 있도록 감싸는 클래스입니다.
예)
- int → Integer
- double → Double
- char → Character
2. 주요 Wrapper 클래스
| 기본 타입 | Wrapper 클래스 |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
3. Wrapper 클래스의 주요 차이점
| 구분 | 기본 타입 (Primitive Type) | Wrapper 클래스 (Reference Type) |
| 메모리 저장 위치 | 스택(Stack) | 힙(Heap) |
| 기본 제공 연산 | 산술 연산 (+, -, *, /) 가능 | 직접 연산 불가능 (intValue()로 변환 후 연산) |
| 기본 값 (초기화 값) | 0 (boolean은 false) | null |
| 객체 특성 | 객체가 아님 | 객체이므로 null 허용 |
| 사용 용도 | 기본적인 연산 | 제네릭(Generic), 컬렉션(Collection), 객체 지향 프로그래밍에서 활용 |
4. 주요 차이점 상세 비교
✅ 메모리 차이
- 기본 타입은 스택(Stack) 에 저장되지만,
Wrapper 클래스는 힙(Heap) 에 객체로 생성됨.
int a = 10; // 스택 메모리 사용
Integer b = new Integer(10); // 힙 메모리 사용
✅ null 사용 가능 여부
- 기본 타입은 null을 가질 수 없음.
- Wrapper 클래스는 참조형이므로 null 할당 가능.
Integer num = null; // 가능
int num2 = null; // 컴파일 오류 발생
✅ 오토 박싱(Auto-Boxing) & 언박싱(Unboxing)
- 기본 타입과 Wrapper 클래스를 자동 변환하는 기능.
int num = 10;
Integer wrapperNum = num; // Auto-Boxing
int newNum = wrapperNum; // Unboxing
✅ 컬렉션에서의 사용
- Java의 컬렉션(List, Set, Map)은 기본 타입을 직접 저장할 수 없음.
- Wrapper 클래스를 사용해야 함.
List<Integer> list = new ArrayList<>();
list.add(10); // 기본 타입 int는 컬렉션에 추가 불가능
5. 언제 Wrapper 클래스를 사용해야 할까?
✅ 기본 타입 사용이 적합할 때:
- 성능이 중요한 경우 (메모리 절약, 속도 빠름)
- 단순한 연산이 필요한 경우
✅ Wrapper 클래스 사용이 적합할 때:
- 컬렉션(List, Map)을 사용할 때
- null 값을 허용해야 할 때
- 객체로 활용해야 할 때 (예: 리플렉션, 스트림 API)
6. 결론
- 기본적으로 성능이 중요한 경우 기본 타입 사용
- null 처리나 객체가 필요할 때 Wrapper 클래스 사용
- 자바 5 이후 Auto-Boxing/Unboxing 덕분에 크게 신경 쓰지 않아도 됨.
하지만, 불필요한 박싱/언박싱이 성능 저하를 유발할 수 있으므로 주의!
728x90
'개발 > 자바' 카테고리의 다른 글
| Java8 : LocalDate vs ZonedDateTime 차이 (0) | 2025.02.19 |
|---|---|
| Java8 : LocalDate, LocalTime, LocalDateTime 날짜 및 시간 관련 클래스 (0) | 2025.02.19 |
| Java 14 switch 표현식 (switch expression) (0) | 2025.02.18 |
| Java 8의 Predicate 인터페이스 (0) | 2025.02.18 |
| Java 추상 클래스 (abstract class) (0) | 2025.02.18 |