자바에는 int, double, boolean 같은 기본형(primitive type) 데이터 타입이 있다. 이들은 성능이 뛰어나고 메모리 사용이 효율적이지만, 객체가 아니라는 한계도 함께 가진다.
1. 객체가 아니기에 생기는 제약
- 기본형은 메서드를 가질 수 없다. 예를 들어 int는 문자열로 바꾸는 등의 기능이 없다.
- List, Set, Map 같은 컬렉션 프레임워크에는 객체만 담을 수 있기 때문에 기본형은 사용할 수 없다.
- 제네릭 타입(List<T>)에도 기본형은 사용할 수 없다.
- 기본형은 null 값을 가질 수 없다. 하지만 실제 개발에선 값이 없음을 표현해야 하는 경우가 많다.
이런 불편을 해결하기 위해 자바는 기본형에 대응하는 래퍼 클래스(wrapper class) 를 제공한다.
기본형래퍼 클래스
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
이 래퍼 클래스들은 모두 불변(immutable)하며, null을 허용하고 메서드도 제공한다.
박싱(Boxing)과 언박싱(Unboxing)
래퍼 클래스는 기본형 값을 객체로 감싸거나 다시 꺼내는 기능을 제공한다.
int value = 10;
Integer boxed = Integer.valueOf(value); // 박싱 (기본형 → 객체)
int unboxed = boxed.intValue(); // 언박싱 (객체 → 기본형)
자바 1.5부터는 이러한 박싱/언박싱을 자동으로 처리해준다. 이를 오토 박싱(Auto-boxing), 오토 언박싱(Auto-unboxing)이라고 부른다.
int value = 7;
Integer boxedValue = value; // 오토 박싱
int unboxedValue = boxedValue; // 오토 언박싱
//컴파일 시 아래처럼 자동 변환된다.
Integer boxedValue = Integer.valueOf(value); //박싱
int unboxedValue = boxedValue.intValue(); //언박싱
래퍼 클래스는 단지 박스에 싸는 용도만 있는 게 아니다.
다양한 메서드를 통해 기본형만으로는 할 수 없던 일도 가능하게 해준다.
- valueOf("100") : 문자열을 래퍼 객체로 변환한다.
- parseInt("100") : 문자열을 기본형 숫자로 변환한다.
- compareTo() : 값 크기 비교에 사용된다.
- Integer.sum(10, 20) : 기본형 연산도 지원한다.
결론적으로
처음에는 단순했던 int, double이 점점 복잡해지는 프로그램 속에서 한계를 드러내고, 우리는 그것을 객체로 감싸는 래퍼 클래스를 통해 해결해왔다. 덕분에 이제 기본형도 컬렉션에 담을 수 있고, null을 표현할 수 있으며, 다양한 메서드와 유틸리티 함수를 자유롭게 사용할 수 있다.
래퍼 클래스는 기본형을 객체로 바꿔주는 단순한 도구가 아니라,
자바의 객체지향성을 실생활에 연결해주는 실용적인 도구다.
'자바' 카테고리의 다른 글
| [JAVA] 날짜와 시간 (1) | 2025.07.06 |
|---|---|
| [JAVA] 열거형(ENUM)에 대하여 (1) | 2025.06.29 |
| [JAVA] String 클래스에 대하여 (0) | 2025.06.24 |
| [JAVA] 불변객체에 대하여 (0) | 2025.06.24 |
| [JAVA] Object Class에 대하여 (6) | 2025.06.24 |