Java Wrapper 클래스 이해하기
Java 개발을 하다 보면 기본형(primitive type)과 참조형(reference type)의 차이가 정확히 뭔지 헷갈릴 때가 있습니다. Java 개발자라면 정확하게 알고 있어야 하는 내용인 것 같아서 간단하게 정리해보았습니다.
Java Wrapper 클래스란?
Wrapper 클래스는 Java의 기본형 타입을 객체로 다룰 수 있게 해주는 클래스입니다. 아래와 같이 총 8개가 있습니다.
기본형(Primitive Type) | Wrapper 클래스(Reference Type) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
Wrapper 클래스가 필요한 경우
null 처리가 필요할 경우
기본형(Primitive Type)은 null을 가질 수 없습니다. null일수 있는 경우라면 Wrapper 클래스를 써야 합니다.
컬렉션 사용 시 필요
List, Set, Map같은 컬렉션 클래스는 객체만 저장할 수 있습니다. 기본형(Primitive Type)을 바로 저장하려고 하면 에러가 발생합니다.
Wrapper 클래스에서 제공하는 메소드 사용 시 필요
각 Wrapper 클래스에는 형변환을 쉽게 할 수 있게 도와주는 메소드나 해당 자료형의 MIN, MAX값이 정의된 상수 등을 제공합니다.
제네릭(Generic) 사용 시 필요
class Box<T> {
T value;
}
Box<Integer> box = new Box<>();
제네릭(Generic)은 기본형(Primitive Type)을 지원하지 않습니다.
오토박싱(Auto-boxing)과 언박싱(Unboxing)
Integer wrapped = 10; // 오토박싱: int 10이 Integer로 변환
int primitive = wrapped; // 언박싱: Integer가 int로 변환
기본형(Primitive Type)과 Wrapper 클래스는 서로 자동으로 변환됩니다.
기본형(Primitive Type) -> Wrapper 클래스로의 변환은 오토박싱(Auto-boxing)
Wrapper 클래스 -> 기본형(Primitive Type)으로의 변환은 언박싱(Unboxing)이라고 합니다.
Wrapper 클래스 사용 시 주의사항
NullPointerException
Integer number = null;
int value = number; // NullPointerException 발생!
null을 기본형(Primitive Type)으로 언박싱(Unboxing)하려고 하면 NullPointerException이 발생합니다.
== 연산자 비교 주의
값을 비교할 때 int와 같은 기본형(Primitive Type)은 "=="로 비교하지만 Wrapper 클래스는 객체이기 때문에 String과 마찬가지로 equals 메소드로 비교해야 합니다.
성능 저하
Wrapper 클래스는 객체이기 때문에 기본형(Primitive Type) 데이터보다 메모리를 많이 사용합니다. 보통은 별 차이가 없겠지만 대량의 데이터를 처리할 때는 큰 차이가 있을 수도 있습니다. 꼭 필요한 경우에만 Wrapper 클래스를 사용하는 게 좋습니다.
댓글
댓글 쓰기