본문 바로가기
Language/Java

[Java] 래퍼(wrapper) 클래스

by 계범 2022. 3. 8.

래퍼클래스란

기본형(primitive type)변수를 객체로 다룰 수 있게 한 클래스이다.

기본형 타입을 객체로 다뤄야할 필요가 있을 때 쓰인다.

 

// 예시(Integer)
public final class Integer extends Number implements Comparable{
	...
    private int value;
    ...
}

래퍼 클래스들은 객체생성 시 생성자의 인자로 주어진 각 자료형에 알맞은 값을 내부적으로 저장하고 있고, 관련된 여러 메서드가 정의되어있다.

 

class WrapperEx1 {
	public static void main(String[] args) {
		Integer i  = new Integer.valueOf(100); // 기존 new Integer(숫자) 는 Deprecated 됨
		Integer i2 = new Integer.valueOf(100);

		System.out.println("i==i2 ? "+(i==i2));
		System.out.println("i.equals(i2) ? "+i.equals(i2));
		System.out.println("i.compareTo(i2)="+i.compareTo(i2));
		System.out.println("i.toString()="+i.toString());

		System.out.println("MAX_VALUE="+Integer.MAX_VALUE);
		System.out.println("MIN_VALUE="+Integer.MIN_VALUE);
		System.out.println("SIZE=" +Integer.SIZE+" bits");
		System.out.println("BYTES="+Integer.BYTES+" bytes");
		System.out.println("TYPE=" +Integer.TYPE);
	}
}
//결과
i==i2 ? true
i.equals(i2) ? true
i.compareTo(i2)=0
i.toString()=100
MAX_VALUE=2147483647
MIN_VALUE=-2147483648
SIZE=32 bits
BYTES=4 bytes
TYPE=int

 

Number클래스

추상클래스로 내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스의 조상클래스이다.

 

BigInteger는 long으로도 다룰 수 없는 큰 숫자,

BigDecimal은 double로도 다룰 수 없는 큰 범위의 부동 소수점수를 처리해주는 래퍼 클래스이다.

 

오토박싱 & 언박싱(autoboxing & unboxing)

JDK1.5이전엔 기본형과 참조형 간의 연산이 불가능해서 래퍼클래스로 기본형을 변환 후 연산했었다.

이후 기본형 값을 참조형 객체로 자동으로 변환해주는 코드를 컴파일러가 넣어줘서 가능해졌다.

 

기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것을 '오토박싱',

반대로 변환하는 것을 '언박싱'이라고 한다.

 

class WrapperEx3 {
	public static void main(String[] args) {
		int i = 10;

        // 기본형을 참조형으로 형변환(형변환 생략가능)
		Integer intg = (Integer)i; // Integer intg = Integer.valueOf(i);
		Object   obj = (Object)i;  // Object obj = (Object)Integer.valueOf(i);

		Long     lng = 100L;  // Long lng = new Long(100L);

		int i2 = intg + 10;   // 참조형과 기본형간의 연산 가능
		long l = intg + lng;  // 참조형 간의 덧셈도 가능

		Integer intg2 = new Integer(20);
		int i3 = (int)intg2;  // 참조형을 기본형으로 형변환도 가능(형변환 생략가능)

		Integer intg3 = intg2 + i3; 

		System.out.println("i     ="+i);
		System.out.println("intg  ="+intg);
		System.out.println("obj   ="+obj);
		System.out.println("lng   ="+lng);
		System.out.println("intg + 10  ="+i2);
		System.out.println("intg + lng ="+l);
		System.out.println("intg2 ="+intg2);
		System.out.println("i3    ="+i3);
		System.out.println("intg2 + i3 ="+intg3);
	}
}
//결과
i     =10
intg  =10
obj   =10
lng   =100
intg + 10  =20
intg + lng =110
intg2 =20
i3    =20
intg2 + i3 =40

 

참조

'Java의 정석' 책

댓글