래퍼클래스란
기본형(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의 정석' 책
'Language > Java' 카테고리의 다른 글
[Java] 정규식(Reualar Expression), 정규표현식(Regex) (0) | 2022.03.09 |
---|---|
[Java] Objects 클래스 (0) | 2022.03.08 |
[Java] String, StringBuffer, StringBuilder 클래스 (0) | 2022.03.07 |
[Java] Object 클래스 (0) | 2022.03.07 |
[Java] 예외처리(exception handling), 에러와 예외의 차이 (0) | 2022.03.06 |
댓글