[Java] 래퍼 클래스

이준영·2023년 11월 24일
0

🟫 Java

목록 보기
12/21

래퍼 클래스

public static void showData(Object obj) {
	System.out.println(obj);
}

위와같이 매개변수로 인스턴스를 받아 출력해주는 메소드가 있다면 숫자 10을 출력하고 싶어도 숫자 10은 인스턴스가 아니기에

showData(10)

이러한 코드의 수행은 불가능 합니다. 상수를 인스턴스화 시켜서 메소드에 전달해야 하는데, 래퍼 클래스를 이용하면 기본 자료형의 값을 인스턴스화 시킬 수 있습니다.


래퍼 클래스 Boxing & UnBoxing


래퍼 클래스는 자체적으로 상수를 인스턴스화 시키는 박싱, 인스턴스의 값을 꺼내는 언박싱 이라는 개념이 있습니다. 아래 코드와 같이 상수를 인스턴스로, 인스턴스를 상수로 변환 가능합니다.

Integer wrapI = Integer.valueOf(3);   //박싱
Double wrapD = Double.valueOf(7.15);  //박싱 

int numI = wrapI.intValue();            //언박싱
double numD = wrapD.doubleValue();      //언박싱

또한 valueOf(), intValue()로 명시하지 않더라도 아래와 같이 오토박싱, 오토언박싱을 통해 인스턴스를 상수처럼 상수를 인스턴스처럼 사용 가능합니다.

Integer wrapI = 3;    //오토박싱
Double wrapD = 7.15;  //오토박싱 

int numI = wrapI    //오토언박싱
double numD = wrapD ![](https://velog.velcdn.com/images/dlzlqlzl/post/f10919c1-b4cd-496d-9ff9-8d06134f3029/image.png)
//오토언박싱

값의 증감이 불가능한 래퍼 클래스

래퍼클래스는 기본적으로 String과 같이 값을 변경할 수 없는 Immutable 인스턴스 이기 때문에 증감 연산이 불가능합니다.

굳이 10의 값을 가진 Integer를 15로 만들고 싶다면

Integer newInteger = Integer.valueOf(wrapI + 3);

이렇게 값을 연산해서 새로운 인스턴스를 만들어야 합니다.

Integer num = 10;
num++;

그렇다면 위와 같은 경우는 문제없이 증가가 되는데 어떻게 되는 것일까? 하는 생각이 들었습니다. 실제로는 값을 따로
새로운 인스턴스를 생성하여 반환해 주는 방식으로 이루어진다고 합니다.

Integer num = 10;
num++;  // new Integer(num.intValue() + 1);

Number 클래스

Integer, Double 등의 래퍼 클래스들은 공통적으로 추상 클래스인 Number 클래스를 상속받고 있습니다.

Number 클래스는 intValue(), longValue() 등등 다양한 추상 메소드를 가지고 있고, 이를 상속받은 래퍼 클래스들은 공통적으로 같은 메소드를 선언하고 있을 것입니다.

따라서 Integer를 double형으로, Double을 int형으로 변환하는것도 가능하다는 것을 알 수 있습니다.

Integer iNum = 10;
System.out.println(iNum);
System.out.println(iNum.doubleValue());
Double dNum = 3.14;
System.out.println(dNum);
System.out.println(dNum.intValue());

출력 결과
10
10.0
3.14
3

정수에 대한 2진, 8진, 16진수 표현 메소드

Integer 클래스에는 정수를 2진, 8진 16진수 String으로 표현해주는 메소드가 존재합니다.

Integer.toBinaryString(12) - 정수 12를 이진수로 표현
Integer.toOctalString(12) - 정수 12를 8진수로 표현
Integer.toHexString(12) - 정수 12를 16진수로 표현

System.out.println(Integer.toBinaryString(12));
System.out.println(Integer.toOctalString(12));
System.out.println(Integer.toHexString(12));

출력 결과
1100
14
c
profile
작은 걸음이라도 꾸준히

0개의 댓글