자바 오토박싱(autoBoxing) 알아보기

2024-01-22


사진: Unsplash 의 NEOM


1. 정의

 

오토박싱은 Java 컴파일러가 기본 유형(원시타입)과 해당 객체 래퍼 클래스 간에 수행하는 자동 변환이다. 예를 들어 int를 Integer로, double을 Double로 변환하는 등의 작업을 뜻한다. 변환이 반대 방향으로 진행되는 경우 이를 언박싱(Unboxing)이라고 한다.


2. 예제

 

나머지(%) 및 단항 더하기(+=) 연산자는 Integer 객체에 적용되지 않으나, Java 컴파일러가 오류를 발생시키지 않고 메서드를 컴파일하는 이유는 런타임에 Integer를 int로 변환하기 위해 intValue 메서드를 호출하기 때문에 오류를 생성하지 않는다.

 

때문에 아래 예제에서는 오류 없이 동일한 값을 리턴한다.

 

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@SpringBootTest
public class Autoboxing {

   @Test
   public void autoboxingTest(){
       List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

       System.out.println("sumEven1 result : "+sumEven1(list)); //6
       System.out.println("sumEven2 result : "+sumEven2(list)); //6
   }

    public static int sumEven1(List<Integer> li) {
        int sum = 0;
        for (Integer i: li)
            if (i % 2 == 0)
                sum += i;
        return sum;
    }

    public static int sumEven2(List<Integer> li) {
        int sum = 0;
        for (Integer i : li)
            if (i.intValue() % 2 == 0)
                sum += i.intValue();
        return sum;
    }
}

 


인텔리제이에서 intValue()는 런타임시 자동으로 적용되기 때문에 unboxing 이 따로 필요 없다고도 알려주고 있다.

 


3. Primitive typeWrapper class

 

boolean Boolean
byte Byte
char Character
float Float
int Integer
long Long
short Short
double Double

4. 출처

 

https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

 

Autoboxing and Unboxing (The Java™ Tutorials > Learning the Java Language > Numbers and Strings)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com


메인 이미지 출처 : 사진: UnsplashNEOM