2024-01-22
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