프로그래밍/자바(Java)

[ 자바 / JAVA ] Wrapper Class(Wrapper 클래스)

후르트링 2021. 7. 26. 18:32
728x90

"감싸다, 포장지"같은 뜻을 가진 wrapper라는 이름처럼 Wrapper 클래스는

"기본 자료형의 데이터를 감싸는 클래스" 입니다.

여기서 말하는 기본 자료형이랑 int, double, bool 등입니다.

그러면 기존에 있는 int, double 등을 사용하면 되는데 왜 Wrapper 클래스를 사용해야 될까요?

사용하는 목적과 특징을 살펴보도록 하겠습니다.

 

[Wrapper 클래스를 사용해야하는 이유?]

사용 용도로는

  • 객체로 저장해야 하는 경우나 매개변수로 객체가 요구되는 경우
  • 객체 간의 비교가 필요한 경우

먼저 다음과 같은 메소드가 있다고 생각해 봅시다.

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

이 메소드를 이용하여 정수 10과 실수 21.5를 출력하려고 합니다.

인자가 Object 클래스이므로 Object 클래스를 상속하는 인스턴스의 형태가 되어야합니다.

그러므로 int, double같은 기본 자료형이 인스턴스로 표현되어야 할 때 Wrapper클래스를 사용합니다.

아래 코드와 같이 기본 자료형을 인스턴스로 표현 할 수 있습니다,

class IsWrapper
{
    public static void printData(Object obj)
    {
        System.out.println(obj);
    }

    public static void main(String[] args)
    {
        Integer intWrapper = new Integer(10);
        printData(intWrapper);

        Double doubleWrapper = new Double(21.5);
        printData(doubleWrapper);
        printData(new Double(15.5));
    }
}

//출력
//10
//21.5
//15.5

 

[Wrapper 클래스의 특징]

  • 위의 코드처럼 인자를 object 클래스 기반으로 정의하는 제네릭과 Collection 타입에서 많이 사용합니다.
  • Wrapper 클래스는 인스턴스에 저장 된 값을 변경할 수 없습니다. (Immutable)
    • 산술 연산을 위한 클래스가 아니기 때문입니다.

 

[Boxing & Unboxing]

  • Boxing은 기본 자료형 데이터를 인스턴스화 시키는 작업을 말합니다.
  • Unboxing은 반대로 인스턴스에 저장되어 있는 기본 자료형을 꺼내는 작업을 말합니다.

아래와 같이 Wrapper클래스의 정의 되어있는 intValue() 메소드를 통하여 Unboxing 할 수 있습니다.

class BoxUnbox
{
    public static void main(String args[])
    {
        //Boxing
        Integer boxingInt = new Integer(100);

        //Unboxing
        unboxingInt = new Integer(boxingInt.intValue()+10);

        System.out.println(boxingInt);
        System.out.println(unboxingInt);
    }
}

//출력결과
//100
//110

 

[Auto Boxing]

자바 버전 5.0, JDK 1.5 이후 부터는 Boxing과 Unboxing을 자동으로 해주는 AutoBoxing과 Auto Unboxing을 제공합니다.

아래 코드를 확인 해보도록 하겠습니다.

// Auto Boxing 제공 X
List <Integer> list = new ArrayList<>();
list.add(new Integer(10));
list.add(new Integer(20));
list.add(new Integer(30));

//Auto Boxing 제공 O
List <Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(30);