언어(Language)/Java

[Java] 자바 래퍼 클래스(Wrapper Class)

다문다뭉 2024. 9. 26. 12:55

래퍼 클래스(Wrapper Class)?

자바의 자료형은 기본 타입(primitive type)과 참조 타입(reference type)으로 나뉜다.

  • 기본 타입 : char, int, float, double, boolean, long, short 등
  • 참조 타입 : class, interface 등

기본 자료 타입을 객체로 사용하기 위해서 래퍼 클래스(wrapper class)가 존재한다.

 

래퍼 클래스 종류

int와 char만 Integer, Character 이름이 다른 래퍼 클래스이고,

나머지는 기본 타입의 첫 글자를 대문자로 바꾼 이름을 가지고 있다.

기본 타입 래퍼 클래스
byte Byte
char Character
int Integer
float Float
double Double
boolean Boolean

 

박싱, 언박싱

박싱 : 기본 타입 → 래퍼 클래스로 변환

언박싱 : 래퍼 클래스 → 기본 타입으로 변환

JDK 1.5부터는 자바 컴파일러가 자동으로 박싱, 언박싱을 처리해 준다.

// 박싱
Integer num = new Integet(10);

// 언박싱
int n = num.intValue();

 

래퍼 클래스 동등비교

int num1 = 10;
Integer num2 = new Integer(10);
Integer num3 = new Integer(10);

// 기본 타입, 래퍼클래스
num1 == num2; // true
num1.equals(num2); // true

// 래퍼클래스, 래퍼클래스
num2 == num3; // false
num2.equals(num3); // true

래퍼 클래스와 기본 타입은 컴파일러가 자동으로 오토박싱, 언박싱을 처리해 주기 때문에 비교 가능하다.

래퍼 클래스는 객체이므로 ‘==’을 사용하면 주소 값을 비교하게 된다.

따라서 인스턴스에 저장된 값의 동등 비교를 하려면 ‘equals()’를 사용해야 한다.

 

래퍼 클래스 사용하는 이유

  1. java.util 패키지의 클래스는 객체만 처리
  2. Collection 프레임 워크의 데이터 구조는 객체만 저장
    • 래퍼 클래스를 사용하여 자동 박싱, 언박싱이 일어남
 List<Integer> list = new ArrayList<>();
 list.add(50); // 자동 박싱