Java Wrapper 클래스 이해하기

Java 개발을 하다 보면 기본형(primitive type)과 참조형(reference type)의 차이가 정확히 뭔지 헷갈릴 때가 있습니다. Java 개발자라면 정확하게 알고 있어야 하는 내용인 것 같아서 간단하게 정리해보았습니다.

Java Wrapper 클래스란?

Wrapper 클래스는 Java의 기본형 타입을 객체로 다룰 수 있게 해주는 클래스입니다. 아래와 같이 총 8개가 있습니다.

기본형(Primitive Type)Wrapper 클래스(Reference Type)
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean


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 클래스를 사용하는 게 좋습니다.


마무리

문제가 생겼을 때 찾아보면서 해도 되겠지만 Wrapper 클래스의 특성을 잘 모르는 상태에서 개발을 하다 보면 큰 낭패를 볼 수도 있습니다. Wrapper 클래스와 기본형(Primitive Type)의 차이를 잘 이해하고, 상황에 맞게 적절하게 사용해야 합니다.

댓글

이 블로그의 인기 게시물

Spring Boot Initializr 사용법 상세 가이드

SQL 테이블 ALIAS 규칙: 가장 효과적인 방법과 장단점 비교

PostgreSQL 로컬 PC(윈도우)에 설치하기 - 17.4버전 기준