본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


자바에는 int, double, float와 같은 기본형(primitive type)의 자료형과 포장 클래스(wrapper)가 있다.

박싱과 언박싱에 대해서 아려면 일단 Wrapper에 대해서 알아야 한다.


wrapper class는 왜 사용하는 걸까 ?


1. 객체 또는 클래스가 제공하는 메서드 또는 생성자에 필요(기본형이 아닌 객체로 저장이 되어야 할 때) 쉽게 말하자면 Collection을 들 수 있다. Map이 있는데 Map에는 Key와 Value가 있다. 선언을 할 때 Map에는 Key와 Value를 참조형만 받을 수 있다. 그래서 Map<String, Integer>으로 선언을 한다. Map<String, int>는 성립되지 않는다.


2. 클래스가 제공하는 상수 사용(MIN_VALUE and MAX_VALUE)


3. 숫자, 문자로의 형 변환 또는 진법 변환에 사용

Integer.parseInt를 예를 들 수 있다.


박싱(boxing)과 언박싱(unboxing)

사전적 의미로 보자면 

박싱 : 상자에 넣다.

언박싱 : 상자에서 꺼낸다.


즉 기본형 객체를 Wrapper 로 바꿔주는 것을 박싱이라고 하고 반대로 Wrapper 클래스 타입의 값을 Primitive로 바꾸는 것을 언박싱이라고 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
    int intData = 512;
    
    //박싱(boxing)
    Integer integerData = new Integer(intData);
    System.out.println(integerData);
    
    //언박싱(unboxing)
    int intData2 = integerData.intValue();
    System.out.println(intData2);
    
    System.out.println(intData == integerData); //true
    System.out.println(intData == intData2); //true
}



명시적 묵시적인 박싱과 언박싱


1. 묵시적인 박싱 

묵시적인 박싱이랑 프로그래머가 임의로 박싱을 해주는 것이 아니라 자동으로 박싱이 되는 것을 말한다.

2. 묵시적인 언박싱 

코드상 프로그래머가 임의로 언박싱을 하는 것이 아니라 자동으로 언박싱이 되는 현상을 말한다.


1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
    int intData = 512;
 
    // 묵시적인 방식
    Integer integerData = intData;
    System.out.println(integerData);
    
    // 묵시적인 언방식
    int sum = integerData + 100;
    System.out.println(sum);
}



1. 명시적인 박싱 

프로그래머가 코딩하여 명시적으로 wrapper로 변환하는 것

2. 묵시적인 언박싱 

프로그래머가 코딩하여 명시적으로 primitive로 변환하는 것


1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
    int intData = 512;
 
    // 명시적인 방식
    Integer integerData = (Integer)intData;
    System.out.println(integerData);
    
    // 명시적인 언방식
    int sum = (int)integerData + 100;
    System.out.println(sum);
}