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

 

래퍼 클래스 (Wrapper Class)

래퍼 클래스는 기본형의 객체 버전이다. 자바는 기본형 데이터를 객체로 다룰 수 있는 래퍼 클래스를 제공한다. 

기본형 (Primitive Type) 래퍼 클래스 (Wrapper Class)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

기본형의 한계와 래퍼 클래스의 필요성

자바에서 래퍼 클래스는 왜 사용하는 것일까?

자바는 객체 지향 언어이다. 그러나 자바에도 객체가 아닌 타입이 존재하는 데 바로 기본형(Primitive type)이다.

기본형의 한계는 다음 두가지가 있다. 첫째, 객체가 아니다. 둘째, 기본형은 항상 값을 가진다.

첫째로 기본형은 객체가 아니다. 단순한 데이터 조각으로 객체 처럼 메소드를 가질 수 없다. 예를 들어, 숫자를 비교하는 간단한 기능도 기본형은 외부 메서드를 사용해야 한다. 래퍼 클래스를 활용해 객체로 만들면 내부에 정의한 메서드를 편리하게 호출하여 사용할 수 있다. 

다음으로 기본형은 항상 값을 가져야 한다. 좋은 제약이지만 값이 없어야 할 경우를 표현해야 하는 경우가 있다. 초기화되지 않은 기본형 변수는 자동으로 0 또는 false로 설정되지만 0 과 false 또한 값으로 값이 없는 상태를 표현할 수 없다. 이 때 객체는 null을 사용한다. 래퍼 클래스를 사용하면 기본형도 null 값을 처리할 수 있다.

 

오토 박싱과 오토 언박싱

기본형을 래퍼 클래스로 변경하는 것을 박싱, 래퍼 클래스를 기본형으로 변경하는 것을 언박싱이라 한다. 

public class WrapperClassMain {

	public static void main(String[] args) {
    	// 박싱
    	Integer newInteger = new Integer(10); // 미래에 삭제 예정, 대신에 valueOf() 사용
        Integer integerObj = Integer.valueOf(10); // -128 ~ 127 자주 사용하는 숫자 값 재사용, 불변
        
        // 언박싱
        int intValue = integerObj.intValue();
	}
  }

 

박싱과 언박싱 기능을 자주 사용하기 때문에 자바는 오토 박싱(Auto-boxing), 오토 언박싱(Auto-Unboxing)을 지원한다. 컴파일러가 자동으로 valueOf, xxxValue() 등의 코드를 추가해주는 기능이다.

public class AutoboxingMain {

	public static void main(String[] args) {
    	// 기본형 -> 래퍼 클래스
        int value = 7;
        Integer boxedValue = value; // 오토 박싱
        
        // 래퍼 클래스 -> 기본형
        int unboxedValue = boxedValue; // 오토 언박싱
    }
}

 

래퍼 클래스 주요 메서드

public class WrapperUtilsMain {

	public static void main(String[] args) {
    	Integer i1 = Integer.valueOf(10); // 숫자, 래퍼 객체 반환
        Integer i2 = Integer.valueOf("10"); // 문자열, 래퍼 객체 반환
        int intValue = Integer.parseInt("10"); // 문자열 전용, 기본형 반환
	
    	//비교
		int compareResult = i1.compareTo(20); 
		
        // 산술 연산
        System.out.println("sum: " + Integer.sum(10, 20));
        System.out.println("min: " + Integer.min(10, 20));
        System.out.println("max: " + Integer.max(10, 20));
	}
}

 

valueOf() 래퍼 객체를 반환한다. 숫자, 문자열 모두 지원
parseInt() 문자열을 기본형으로 변환
compareTo() 내 값과 인수로 넘어온 값 비교.( 크면 1, 같으면 0, 작으면 -1 반환)
Integer.sum(), Integer.min(), Integer.max() 간단한 산술 연산 기능

 

정리

래퍼 클래스는 자바에서 기본형을 객체로 변환한다. 기본형이 가진 한계를 보완하고 유틸리티 메서드, null 값 처리 등 기본형을 보다 유연하게 사용할 수 있게 한다.

참고

김영한의 실전 자바 - 중급 1