본문 바로가기
JAVA/JAVA

래퍼 클래스(Wrapper class)

by 개미가되고싶은사람 2024. 3. 10.

래퍼 클래스란(Wrapper class)?

자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어집니다. 대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있는데 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 있습니다. 이럴 때에 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다. 

 

래퍼 클래스의 종류

래퍼 클래스는 모두 java.lang 패키지에 포함되어 제공된다.

그래서 별다른 패키지 불러오기 없이 곧바로 소스 단에서 사용이 가능하다.

 

박싱(Boxing)과 언박싱(UnBoxing)

기본 자료 타입을 객체로 사용하는 만드는 것을 의미한다.

 

박싱(Boxing): 기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환

언박싱(UnBoxing): 래퍼 클래스의 인스턴스에 저장된 값을 다시 기본 타입으로 변환

 

// 박싱 
Integer num = new Integer(10); // 레퍼클래스인 참조 변수 Integer에 기본 데이터 정수 10을 넣음

// 언박싱 (intValue)
int n = num.intValue(); // 래퍼 클래스 num의 값을 기본 타입인 int로 꺼내 가져온다.

 

 

자동 박싱(AutoBoxing)과 자동 언박싱(AutoUnBoxing)

어 그럼 기본타입 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 생각날 수 있다. 왜 자동으로 박싱과 언방싱이 일어난 이유는 JDK 1.5부터 자바 컴파일러가 자동으로 처리 해 준다.

Character ch = 'X'; // Character ch = new Character('X'); : 오토박싱

char c = ch;        // char c = ch.charValue();           : 오토언박싱

 

 

주의사항

래퍼 클래스도 객체이므로 동등 연산자(==)를 사용하게 되면, 두 인스턴스의 값을 비교하는 것이 아니라 두 인스턴스의 주소값을 비교하게 됩니다. 그러므로 인스턴스에 저장된 값의 동등 여부를 정확히 판단하려면 equals()메소드를 사용해야만 합니다.

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

System.out.println(num1 < num2);       // true
System.out.println(num1 == num3);      // false	
System.out.println(num1.equals(num3)); // true

 

예외상황

래퍼 클래스의 동등 연산자(==)도 오토 언박싱 기능을 통해 가능하다.

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

	System.out.println(num1 < num2);       // true
	System.out.println(num1 == num3);      // true
	System.out.println(num1.equals(num3)); // true