본문 바로가기
깨알정보

자바 래퍼 클래스 알아보기

by 에레메쓰 2021. 3. 20.
반응형

자바 래퍼 클래스(Wrapper Class)라고 하면 어디서 많이는 들어 봤는데 자세하게 정의를 못 내리는 분들이 많더라고요. 자라 래퍼 클래스란 "Primitive Type(int, char, float, double 등)"을 객체화한 형태가 Wrapper Class입니다. 아래의 "Simple Type"이 Primitive Type라고 생각하시면 됩니다.

 

Wrapper Classes for converting Simple Types


  • Simple Type: boolean / Wrapper class: Boolean
  • Simple Type: char / Wrapper class: Character
  • Simple Type: double / Wrapper class: Double
  • Simple Type: float / Wrapper class: Float
  • Simple Type: int / Wrapper class: Integer 
  • Simple Type: long / Wrapper class: Long

정의하는 방법으로는 Integer 변수이름 = new Interger(값);으로 정의합니다. 자바 객체화하는 방식과 동일한데요. Wrapper Class로 정의하면 객체처럼 메서드를 사용할 수 있게 됩니다. 아래와 같이 래퍼 타입으로 정의 시 메서드를 사용합니다.

 

 public static void main(String[] args) {
        
        Integer a = new Integer(3);
        
        System.out.println(a.MIN_VALUE);
        System.out.println(a.MAX_VALUE);

}
    
-2147483648 // 출력(1)
2147483647 // 출력(2)

 

Boxing, Unboxing


Boxing, Unboxing으로 넘어간다. 되게 단순하고 간단합니다. Boxing은 Primitive Type을 Wrapper Class로 바꾸는 것 반대로 Unboxing은 Wrapper Class를 Primitive Type으로 바꾸는 것입니다. 예제를 통해 알아보도록 하죠.

 

public static void main(String[] args) {
        
        Integer a = new Integer(3);
        int b = 3;
        
        Integer c = (Integer) b; // boxing 예제
        int d = (int) a; // Unboxing 예제
        
        int e = a; // 자동으로 된다!!
        Integer f = b; // 자동으로 된다!!
        
    }

 

Primitive Type "int b"를 Wrapper Type "Integer c"에 넣을 때 타입이 다르기 때문에 "(Integer)"를 붙어주는 것이 Boxing 이고, Wrapper type "Integer a"를 "int b"에 넣을 때에도 동일하게 타입이 다르기 때문에 "(int)"를 붙여주는 것이 Unboxing입니다. 

 

그러나, 아래의 "int e" "Integer f"를 보면 에러없이 컴파일이 되는데 JDK 1.5 Version부터는 Auto Boxing/Unboxing을 제공합니다. 따라서, 간편하게 사용은 하되 개념은 반드시 알아두어야 합니다.

 

Wrapper Class 특징을 더 살펴보면 제네릭 사용 시 필수로 들어가는데 제네릭은 "<>"를 생각하면 됩니다. 

 

public static void main(String[] args){

	ArrayList<Integer> list = new ArrayList<>(); // 제네릭
	ArrayList<int> list2 = new ArrayList<>(); // 제네릭은 Primitive Type을 받지 않음
    
}

제네릭 안에 Wraaper Class를 사용하는 경우(<Integer>) 정의가 정상적으로 되지만 Primitive Type을 사용하는 경우 에러가 발생됩니다. 따라서, 제네릭 안에 객체 자료형을 사용하는 경우 무조건 Wrapper Class를 사용해야 합니다. 

 

다음은 Wrapper Class에 Unll 값이 들어가지는데 "Primitive Type"은 에러가 발생되지만 "Wrapper Class"는 에러가 발생되지 않습니다.

 

public static void main(String[] args){

	integer a = null;
	int b = null;
    
}

 

정리


Wrapper Class는 Primitive Type을 객체화하고 메소드로도 사용이 가능합니다. Boxing은 Pimitive Type을 Wrapper Type으로 바꾸는 것, Uniboxing은 Wrapper Type을 Primitive Type으로 바꾸는 것입니다. 다만, Java 1.5 이상부터 Auto로 변경되기 때문에 개념만 알아두시면 됩니다. 마지막으로, Wrapper Class를 사용하는 이유는 제네릭(<>)속에 Wrapper Class만 들어가고 Null 값도 넣을 수 있기 때문입니다.

 

댓글