JAVA

[JAVA] wrapper 클래스, 오토박싱과 언오토박싱

정공자씨 2024. 4. 28. 19:23

 

 

 

wrapper 클래스란?

  • 자바의 자료형은 데이터의 타입을 의미하고, 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어짐
[ 자료형 ]
1. 기본 타입 : byte, short, int, long, float, double, char, boolean
2. 참조 타입 : 참조할 수 있는 모든 자료형(배열, class, enum 등)
  • 기본 타입의 데이터를 참조 타입으로 표현해야 하는 경우가 있는데, 이 경우에 기본 타입의 데이터를 객체화 해야 할 필요가 있음
    • 기본 타입의 데이터를 객체화 하기 위해서 사용하는 클래스를 래퍼 클래스(wrapper class)라고 함
  • 따라서, 모든 기본 타입은 객체로 표현할 수 있음
    • 이러한 객체를 포장 객체라고 하는데, 기본 타입의 값을 내부에 두고 외부에서 포장(wrap)하는 것처럼 보이기 때문이고
    • 래퍼 클래스가 기본 타입의 값을 감싸고 있기 때문에, 기본 타입의 값은 외부에서 변경할 수 없음

 

 

wrapper 클래스를 사용하는 이유

  • 참조 타입의 자료형을 사용하는 이유와 같음
  • 기본 자료형의 데이터를 단순히 값으로만 사용하지 않고
    • 그 값을 메서드에서 사용하거나
    • null 값을 이용하기 위해(참조형태만 null을 가질 수 있음)
1. 제네릭에서 사용
2. 기본 자료형의 데이터를 문자열로 변환하거나, 문자열을 기본 자료형으로 변환할 때

 

기본 타입에 대한 래퍼 클래스의 종류

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

 

문법

Integer num = new Integer(20);  // 기본 타입 정수를 래퍼 클래스로 감싸기
Integer num2 = 5;  // 생략 가능(오토박싱)

Double num3 = new Double(22.33);
Double num4 = 22.33;  // 생략 가능(오토박싱)

 

 

 

 

 

 

 

 

박싱(Boxing)과 언방식(UnBoxing)

Boxing

  • 기본 타입의 데이터를 래퍼 클래스의 인스턴스로 변환

UnBoxing

  • 래퍼 클래스의 인스턴스에 저장된 값을 기본 타입의 데이터로 변환
Integer num = new Integer(22);  // 박싱

int num2 = num.intValue();    // 언박싱: 객체(Integer)의 값을 int 기본 타입으로 변경

 

 

UnBoxing 메서드

  • 래퍼 클래스의 인스턴스에 저장된 값을 기본 타입으로 변경해주는 메서드
메서드 변환값 설명
intValue()  int 객체의 값을 기본 타입의 데이터로 변경
byteValue()  byte
shortValue()  short
longValue()  long
floatValue()  float
doubleValue()  double
booleanValue()  boolean  

 

 

 

 

 

 

 

 

오토 박싱(Auto Boxing)과 오토 언방식(Auto UnBoxing)

오토박싱과 오토 언박싱

  • JDK5부터 래퍼 클래스 변수에 기본 타입의 값을 대입하면 컴파일러가 자동으로 박싱하고
  • 기본 타입 변수래퍼 클래스에 저장된 값을 대입하면 자동 언박싱을 처리함
  • 즉, 기본 타입의 데이터와 래퍼 클래스 객체간의 변환이 자동으로 이루어짐

 

Integer num = 22;  // new Integer() 생략 가능

int number = num;  // 객체를 int 타입으로 변경하는 intValue() 생략
  • 오토 박싱
    • new 키워드를 사용하지 않고 자동으로 래퍼 클래스의 인스턴스를 생성할 수 있음
    • new Integer( );   생략 가능
  • 오토 언박싱
    • 언박싱 메서드를 사용하지 않고도 인스턴스에 저장된 값을 기본 타입 데이터로 변경
    • intValue( );   생략 가능

 

 

오토박싱과 언방식을 사용하는 예

컬렉션에 기본 타입의 데이터를 저장하면, 자동으로 래퍼 클래스 객체로 변환하여 저장
  • 컬렉션에 기본 타입의 데이터를 저장하려면, 래퍼 클래스 객체를 사용해야 했음
    • 컬렉션에는 객체만 저장할 수 있음
  • 하지만 오토박싱, 언오토박싱 기능이 도입 되어서
    • 기본 타입의 데이터를 저장하면 래퍼 객체로 변환해서 컬랙션에 저장되고
    • 기본 타입의 데이터를 가지고 올 때 다시 래퍼 클래스 객체에서 기본 타입 데이터로 자동 변환해줌
  • 즉, 기본 타입의 데이터와 래퍼 클래스 객체간의 변환이 자동으로 이루어지는 것
public class Test {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();

        // Integer 객체로 자동 변환(오토박싱)되어 List에 저장
        list.add(100);
        list.add(200);
        list.add(300);

        System.out.println(list);  // [100, 200, 300]

        // Ingeger(100) 객체가 정수 100으로 변환되어 intNum에 저장
        Integer integerNum = list.get(0);
        System.out.println(integerNum);  // 100

        // Ingeger(100) 객체가 정수 100으로 변환되어 intNum에 저장
        int intNum = list.get(0);
        System.out.println(intNum);  // 100		
    }
}

 

 

 

 

 

 

출처

https://velog.io/@ksh9409255/%EB%9E%98%ED%8D%BCwrapper-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%97%90-%EB%8C%80%ED%95%B4...%EC%9E%91%EC%84%B1%EC%A4%91

 

 

https://inpa.tistory.com/entry/JAVA-%E2%98%95-wrapper-class-Boxing-UnBoxing