IT/Java

[Java] 포장 클래스(Wrapper Class)

Huitopia 2024. 3. 18. 16:40
728x90

포장 클래스(Wrapper Class)

기본 타입의 데이터를 먼저 객체로 변환 후 작업을 수행해야 하는 상황이 생겼을 때 기본 타입에 해당하는 데이터를 객체로 포장해주는 클래스다. 포장 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만든다.

포장 객체는 포장하고 있는 기본 타입의 값을 변경할 수 없다.

Integer obj = 100; // Boxing
int value = obj; // UnBoxing

Boxing

  • 기본 타입의 값을 포장 객체로 만드는 과정
  • 포장 클래스 변수에 기본 타입 값이 대입될 때 발생

UnBoxing

  • 포장 객체에서 기본 타입의 값을 얻어내는 과정
  • 기본 타입 변수에 포장 객체가 대입될 때 발생

 

예제 코드 1

더보기
package ch12.sec00;

public class WrapperClass03 {
    public static void main(String[] args) {
        // 기본 ➡️ 참조
        int a = 5;
        Integer b = 5; // auto boxing
        Number c = a; // auto boxing
        Object d = a; // auto boxing

        Integer e = null; // ok
//        int f = null; // 값 자체가 없기 때문에 null 사용 불가능
    }
}

int a 가 Integer가 아닌 Number, Object에 대입이 되는 이유는 Object와 Number가 Integer의 상위라 가능하다

예제 코드 2

더보기
package ch12.sec06;

public class BoxingUnBoxingExample {
    public static void main(String[] args) {
        // Boxing
        Integer obj = 100;
        // 수동 unboxing, 재정의한 toString 호출
        System.out.println("obj = " + obj); // 100
        System.out.println("obj.toString() = " + obj.toString()); // 100
        // auto unboxing
        System.out.println("value: " + obj.intValue()); // 100
        // UnBoxing
        int value = obj;
        System.out.println("value = " + value); // 100
        // 연산 시 UnBoxing
        int result = obj + 100;
        System.out.println("result = " + result); // 200
    }
}

 

Wrapper 값 비교

==와 != 연산자는 번지를 비교하기 때문에 포장 객체에 어떤 값이 저장될지 모르는 상황이면 적합하지 않다.

포장 클래스의 equals() 메소드는 내부의 값을 비교하도록 재정의되어 있어, equals() 메소드로 내부 값을 비교할 수 있다.

예제 코드

더보기
package ch12.sec06;

public class ValueCompareExample {
    public static void main(String[] args) {
        // -128 ~ 127 초과값일 경우 다른 객체를 사용하여 번지가 다르다.
        Integer obj1 = 300;
        Integer obj2 = 300;
        System.out.println("==: " + (obj1 == obj2)); // false
        System.out.println(System.identityHashCode(obj1)); // 168423058
        System.out.println(System.identityHashCode(obj2)); // 821270929
        System.out.println("equals(): " + obj1.equals(obj2)); // true
        System.out.println();
        // -128 ~ 127 범위값일 경우 같은 객체를 사용하여 번지가 같다.
        Integer obj3 = 10;
        Integer obj4 = 10;
        System.out.println("==: " + (obj3 == obj4)); // true
        System.out.println(System.identityHashCode(obj3)); // 1919334762
        System.out.println(System.identityHashCode(obj4)); // 1919334762
        System.out.println("equals(): " + obj3.equals(obj4)); // true
    }
}

 

 

 

728x90