● 래퍼 클래스
class UseWrapperClass {
public static void showData(Object obj) {
System.out.println(obj);
}
상기의 코드를 보면 클래스 안에 인스턴스를 요구하는 메소드가 있습니다.
이 메소드의 인수 타입 중 Object 타입은 int, float 등 과는 다른 타입이기 때문에
이 메소드를 통해서 정수 혹은 실수를 출력하려면 해당 값을 인스턴스화 해야 합니다.
public static void main(String[] args) {
Integer iInst = new Integer(3); // 기본 자료형을 감싸는 클래스 래퍼 클래스
showData(iInst);
showData(new Double(7.15)); // 기본 자료형을 감싸는 클래스 래퍼 클래스
}
}
이렇게 기본 자료형의 값을 인스턴스로 감싸는 목적의 클래스를 가리켜 래퍼 클래스라고 합니다.
래퍼 클래스의 종류와 그 생성자는 다음과 같습니다.
Boolean public Boolean(boolean value)
Character public Character(char value)
Byte public Byte(byte value)
Short public Short(short value)
Integer public Integer(int value)
Long public Long(long value)
Float public Float(float value), public Float(double value)
Double public Double(double value)
래퍼클래스는 감싸는 용도로 쓰는데 참조 값에 참조를 시킬 때 필요하기 때문입니다.
기본 자료를 래퍼 인스턴스 안에 넣는 것을 Boxing 이라고 하고,
래퍼 인스턴스에서 꺼내서 기본 자료형으로 단독 사용하는 것을 Unboxing 이라고 합니다.
언박싱 메소드의 이름은 다음과 같습니다.
Boolean public boolean booleanValue()
Character public char charValue()
Integer public int intValue()
Long public long longValue()
Double public double doubleValue()
아래의 예제로 확인해볼게요.
public static void main(String[] args) {
Integer iObj = new Integer(10); // 박싱
Double dObj = new Double(3.14); // 박싱
. . . .
int num1 = iObj.intValue(); // 언박싱
double num2 = dObj.doubleValue(); // 언박싱
. . . .
// 래퍼 인스턴스 값의 증가 방법
iObj = new Integer(iObj.intValue() + 10); // 이 경우에 맨 첫 블록에 있는 iObj의 값은 가비지가 됩니다.
dObj = new Double(dObj.doubleValue() + 1.2);
. . . .
}
박싱과 언박싱은 자동으로 진행될 수 있는데, 자료의 입력 위치에 따라 달라집니다.
class AutoBoxingUnboxing {
public static void main(String[] args) {
Integer iObj = 10; // 오토 박싱 진행
Double dObj = 3.14; // 오토 박싱 진행
. . . .
인스턴스가 와야할 위치에 기본 자료형이 오면 오토 박싱이 진행되는 것이고,
int num1 = iObj; // 오토 언박싱 진행
double num2 = dObj; // 오토 언박싱 진행
. . . .
}
}
기본 자료형 값이 와야할 위치에 인스턴스가 오면 오토 언박싱이 됩니다.
● Number 클래스
모든 래퍼 클래스가 상속하는 클래스 입니다.
java.lang.Number
언박싱 메소드는 추상 메소드로 정의를 하고 있습니다.
java.lang.Number에 정의된 추상 메소드들
public abstract int intValue()
public abstract long longValue()
public abstract double doubleValue()
→ 즉 래퍼 인스턴스에 저장된 값을 원하는 형의 기본 자료형 값으로 반환(언박싱) 할 수 있습니다.
(주어진 값을 어떻게 언박싱 하는가에 따라 강제로 형 변환이 가능합니다.)
결국 래퍼 클래스는 참조 자료형과 기본 자료형 간의 형 변환이 안 되지만
기본 자료형을 인스턴스처럼 쓸 수 있게 해주는 역할을 합니다.
아래의 예제를 통해서 확인해볼게요.
package day17;
public class WrapperClassMethod {
public static void main(String[] args) {
Integer n1 = Integer.valueOf(5); // 정수 5를 정수형으로 언박싱
Integer n2 = Integer.valueOf("1024"); // 문자열 1024를 정수형으로 언박싱
System.out.println("큰 수: " + Integer.max(n1, n2)); // 기본자료들을 참조함
System.out.println("작은 수: " + Integer.min(n1, n2));
System.out.println("합: " + Integer.sum(n1, n2));
System.out.println();
System.out.println("12의 2진 표현: " + Integer.toBinaryString(12));
System.out.println("12의 8진 표현: " + Integer.toOctalString(12));
System.out.println("12의 16진 표현: " + Integer.toHexString(12));
}
}
'자바 > 자바 입문 공부일지' 카테고리의 다른 글
자바 기초 공부 일지 33. 난수(Random) (0) | 2022.11.01 |
---|---|
자바 기초 공부 일지 32. BigInteger 클래스, BigDecimal 클래스, Math 클래스 (0) | 2022.11.01 |
자바 기초 공부 일지 30. clone 메소드 (0) | 2022.11.01 |
자바 기초 공부 일지 29. 자바 가상머신의 메모리 할당 (0) | 2022.11.01 |
자바 기초 공부 일지 28. 예외의 처리 try~catch 구문 (0) | 2022.11.01 |