오토박싱 & 언박싱

정순동·2023년 12월 14일
0

자바기초

목록 보기
52/89

java 5 이전에는 기본형과 참조형 간의 연산이 불가능 했었기에 래퍼 클래스로 기본형을 객체로 만들어 연산해야 했었다.

	int i = 5;
    Integer iObj = new Integer(7);
    
    int sum = i + iObj;	// java 5 이전에서는 오류

jdk 5 이상 부터는 기본형과 참조형 간의 덧셈이 일어날 때 컴파일러가 아래와 같이 코드를 추가해 주는 방식으로 바뀌었다.

이 외에도 내부적으로 객체 배열을 가지고 있는 Vector클래스나 ArrayList클래스에 기본형값을 저장해야할 때나 형변환이 필요할 때도 컴파일러가 자동적으로 코드를 추가해 준다. 기본형 값을 래퍼 클래스의 객체로 자동 변환해 주는 것을'오토박싱(autoboxing)'이라고 하고, 반대로 변환하는 것을 '언박싱(unboxing)'이라고 한다.

	ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(10);	// 오토박싱. 10 → new Integer(10)
    
    int value = list.get(0);	// 언박싱. new Integer(10) → 10

위 코드에서 보듯, ArrayList에 숫자를 저장하거나 꺼낼 때에 기본형 값을 래퍼 클래스의 객체로 변환하지 않아도 된다.

예제

	class Example {
    	public static void main(String[] args) {
        	int i = 10;
            
            // 기본형을 참조형으로 형변환(형변환 생략가능)
            Integer intg = (Integer)i;	// Integer intg = Integer.valueOf(i);
            Object obj = (Object)i;		// Object obj = (Object)Integer.valueOf(i);
            
            Long lng = 100L;	// Long lng = new Long(100L);
            
            int i2= intg + 10;		// 참조형과 기본형과의 연산 가능
            long l = intg + lng;	// 참조형 간의 덧셈도 가능
            
            Integer intg2 = new Integer(20);
            int i3 = (int)intg2;	// 참조형을 기본형으로 형변환도 가능(형변환 생략가능)
            
            Integer intg3 = intg2 + i3;
        }
    }

위의 예제에서도 볼 수 있듯 컴파일러가 아래와 같은 규칙도 알아서 추가 해 준다.

0개의 댓글