Java

래퍼 (wrapper) 클래스

공부처음하는사람 2024. 7. 10. 12:39

 

자바는 기본 타입의 값을 갖는 객체를 생성할 수 있다. 이런 객체를 래퍼 클래스라고 한다.

값을 포장하고 있다고 해서 붙여진 이름이다.

 

래퍼 클래스를 생성하기 위한 클래스는 java.lang 패키지에 포함되어 있는데, char 타입과 int 타입이 각각 Character, Integer인 것만

제외하고는 기본 타입의 첫 문자를 대문자로 바꾼 이름을 가지고 있다.

 

기본 타입 래퍼 클래스
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
boolean Boolean

 

포장 객체는 포장하고 있는 기본 타입의 값을 변경할 수 없고, 단지 객체로 생성하는데 목적이 있다.

이러한 객체가 필요한 이유는 컬렉션 객체 때문이다. 컬렉션 객체는 기본타입의 값은 저장할 수 없고, 객체만 저장할 수 있다.

 

박싱과 언박싱

기본 타입의 값을 포장 객체로 만드는 과정을 boxing이라 한다.

반대로 포장 객체에서 기본 타입의 값을 얻어내는 과정을 unboxing이라 한다.

 

package ch12.sec06;

public class BoxingUnBoxingEx {
    public static void main(String[] args) {

        //Boxing
        Integer obj = 100;
        System.out.println("value : " + obj.intValue());  // Integer 객체 내부 int값 리턴

        //UnBoxing
        int value = obj;
        System.out.println("value : " + value);

        //연산 시 unboxing
        int result = obj + 100;
        System.out.println("result : " + result);
    }
}

 

 

문자열을 기본 타입 값을 변환

래퍼 클래스는 문자열을 기본 타입 값으로 변환할 때도 사용된다. 대부분 래퍼 클래스에는 parse + 기본타입 명으로 되어있는 static method가 있다. 이 메소드는 문자열을 해당 기본 타입값으로 변환한다.

 

포장 값 비교

래퍼 클래스 내부 값을 비교하기 위해 == 와 != 연산자를 사용할 수 없다. 이 연산은 내부의 값을 비교하는 것이 아니라 포장 객체의 참조값을 비교하기 때문이다.

 

Integer obj1 = 100;
Integer obj2 = 100;
System.out.println(obj1 == opj2);

// 실행결과 : false

 

내부 값을 비교하는 것이 아니라 객체의 참조 주소를 비교한다는 것을 알아두자.

따라서 포장객체에 정확히 어떤 값이 저장될 지 모르는 상황에선 ==, != 연산자를 사용하지 않는것이 좋다.

대신 equals()메소드를 사용해 내부 값을 비교할 수 있다.

 

package ch12.sec06;

public class ValueCompareEx {
    public static void main(String[] args) {
        // -128~127 초과값일 경우
        Integer obj1 = 300;
        Integer obj2 = 300;
        System.out.println("==: " + (obj1 == obj2));
        System.out.println("equals(): " + obj1.equals(obj2));
        System.out.println();

        // -128~127의 경우
        Integer obj3 = 10;
        Integer obj4 = 10;
        System.out.println("==: " + (obj3 == obj4));
        System.out.println("equals(): " + obj3.equals(obj4));
    }
}

 

 

예외의 경우가 있다. 래퍼클래스를 효율적 사용하기 위해 다음 범위의 값을 갖는 래퍼 클래스는 공유된다.

아래 표의 범위 내에 있는 래퍼 클래스는 ==와 != 연산자로 비교할 수 있다.

하지만 내부의 값을 비교하는 것이 아닌 참조 주소를 비교하는것을 알아야한다.

 

타입 범위
boolean true, false
char \u0000 ~ \u007f
byte, short, int -128 ~ 127

 

'Java' 카테고리의 다른 글

어노테이션  (0) 2024.07.10
정규표현식  (0) 2024.07.10
롬복 (Lombok)  (0) 2024.07.09
레코드 선언  (0) 2024.07.09
객체 문자정보 - toString()  (0) 2024.07.09