Wrapper Class란?
Java의 기본 데이터 타입은 객체가 아니기 때문에, 객체처럼 다룰 수 있는 클래스로 변환할 필요가 있을 때가 있습니다. 이때 사용하는 것이 바로 Wrapper 클래스입니다. Wrapper 클래스는 기본 타입을 객체로 다룰 수 있게 해주는 역할을 합니다. 예를 들어 int
는 Integer
, char
는 Character
등의 대응되는 클래스가 존재합니다.
1. 기본 타입과 Wrapper 클래스의 관계
Java에서는 8개의 기본 타입에 대해 각각 대응되는 Wrapper 클래스를 제공합니다.
기본 타입 | Wrapper 클래스 |
---|---|
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
이러한 클래스들은 기본 타입의 값을 객체로 변환하여 다루고자 할 때 사용됩니다.
2. Boxing과 Unboxing
Boxing은 기본 타입을 Wrapper 객체로 변환하는 과정을 의미하며, Unboxing은 Wrapper 객체를 기본 타입으로 변환하는 과정을 말합니다. 자바 5부터는 이러한 변환이 자동으로 이루어지는 Auto-Boxing과 Auto-Unboxing이 도입되었습니다.
예시 : Auto-Boxing과 Auto-Unboxing
int num = 100;
Integer boxedNum = num; // Auto-Boxing: 기본 타입 -> Wrapper 객체
int unboxedNum = boxedNum; // Auto-Unboxing: Wrapper 객체 -> 기본 타입
3. 주요 Wrapper 클래스 메서드
Wrapper 클래스들은 다양한 유용한 메서드를 제공합니다. 특히, 문자열을 기본 타입으로 변환하거나 기본 타입을 문자열로 변환하는 메서드들이 많이 사용됩니다.
주요 메서드
parseInt()
: 문자열을int
타입으로 변환합니다.valueOf()
: 문자열을 Wrapper 객체로 변환합니다.toString()
: 기본 타입을 문자열로 변환합니다.
예시 : 주요 메서드 사용
int num = 100;
Integer boxedNum = num; // Auto-Boxing: 기본 타입 -> Wrapper 객체
int unboxedNum = boxedNum; // Auto-Unboxing: Wrapper 객체 -> 기본 타입
4. Null 처리 주의
Wrapper 클래스는 객체이기 때문에 null
값을 가질 수 있습니다. 기본 타입 변수는 null
을 가질 수 없기 때문에, 만약 null이 할당된 Wrapper 클래스를 Unboxing하려 하면 NullPointerException
이 발생할 수 있습니다.
예시 : NullPointerException 발생
Integer nullWrapper = null;
int unboxed = nullWrapper; // Unboxing 시도 -> NullPointerException 발생
▶ 꿀팁 - Wrapper 클래스 사용 시 주의할 점
- 자동 변환(Auto-Boxing/Unboxing) 주의
- 반복문에서 Wrapper 객체를 자주 사용할 경우, 성능 저하가 발생할 수 있습니다. 불필요한 Boxing/Unboxing이 발생하지 않도록 주의하세요.
==
대신equals()
사용- Wrapper 객체는 기본 타입과 달리 객체이므로
==
연산자는 객체의 참조 주소를 비교합니다. 값 자체를 비교하고 싶다면equals()
메서드를 사용하는 것이 좋습니다.
- Wrapper 객체는 기본 타입과 달리 객체이므로
Integer num1 = 128;
Integer num2 = 128;
System.out.println(num1 == num2); // false (주소 비교)
System.out.println(num1.equals(num2)); // true (값 비교)
- 성능 최적화 고려
- 성능이 중요한 상황에서는 기본 타입을 직접 사용하는 것이 좋습니다. Wrapper 클래스는 객체를 생성하고 메모리를 추가로 소비하기 때문에 기본 타입보다 성능이 떨어질 수 있습니다.
- Null 처리 조심
- Wrapper 클래스를 사용할 때는
null
값에 대한 처리를 항상 고려하세요. 기본 타입은null
을 가질 수 없기 때문에, Unboxing 시 발생할 수 있는NullPointerException
에 대비해야 합니다.
- Wrapper 클래스를 사용할 때는
- 캐싱된 Wrapper 객체 활용
Integer
는 -128에서 127 범위의 값을 캐싱하여 사용합니다. 이 범위 내의 값을new
로 생성하지 않고valueOf()
를 사용하면 메모리 효율성을 높일 수 있습니다.
Integer num1 = 127;
Integer num2 = 127;
System.out.println(num1 == num2); // true (같은 객체 사용)
Integer num3 = 128;
Integer num4 = 128;
System.out.println(num3 == num4); // false (다른 객체 사용)
정리
Java의 Wrapper 클래스는 기본 타입을 객체처럼 다뤄야 하는 상황에서 매우 유용하게 사용됩니다. 하지만 객체로 다루기 때문에 발생할 수 있는 성능 저하나 null
처리 등 주의할 점도 많습니다. 이러한 특성을 잘 이해하고 상황에 맞게 적절히 사용하는 것이 중요해보입니다.
'JAVA' 카테고리의 다른 글
(JAVA) 프로세스와 쓰레드 개념 이해하기 (0) | 2024.09.24 |
---|---|
(JAVA) Generics 개념 이해하기 (0) | 2024.09.20 |
(JAVA) 예외처리 알아가기 (0) | 2024.09.20 |
(JAVA) 다중상속과 인터페이스 알아보기 (0) | 2024.09.20 |
(JAVA) 추상클래스의 개념 + instanceof 이해하기 (0) | 2024.09.20 |