Java

Auto Boxing & Auto UnBoxing

iksadnorth 2023. 7. 17. 21:38

👣 개요

Java에는 Wrapper 클래스가 존재한다.
Wrapper 클래스란 기본 타입 클래스[Ex) int]를 객체로 다뤄야 할 때, 사용하는 클래스다.
내부에 기본 타입의 데이터를 가지고 있고 그것을 다루기 위한 유틸리티 메서드로 구성되어 있다.

사용 예시

1. 제너릭 타입을 요구하는 클래스를 사용할 때,

List<Integer> arr = new ArrayList<>();

2. Wrapper 만 가지고 있는 상수 or 메서드를 사용하기 위해,

Integer max_value = Integer.MAX_VALUE;

Integer str2int = Integer.valueOf("123");

 

👣 Auto Boxing & Auto UnBoxing

// 박싱
int i = 10;
Integer num = new Integer(i);

// 언박싱
Integer num = new Integer(10);
int i = num.intValue();

위와 같이 기본 타입에서 Wrapper 타입으로 변환하는 것을 Boxing,

Wrapper 타입에서 기본 타입으로 변환하는 것을 UnBoxing라고 부른다.

👣 유의 사항

오토 박싱과 언박싱은 내부적으로 추가 연산 작업이 거치게 된다.

// 오토 박싱
public static void main(String[] args) {
    long t = System.currentTimeMillis();
    
    Long sum = 0L;
    for (long i = 0; i < 1000000; i++) {
        sum += i;
    }
    
    System.out.println("실행 시간: " + (System.currentTimeMillis() - t) + " ms");
} // 실행 시간 : 19 ms


// 동일 타입 전달
public static void main(String[] args) {
    long t = System.currentTimeMillis();
    
    long sum = 0L;
    for (long i = 0; i < 1000000; i++) {
        sum += i;
    }
    
    System.out.println("실행 시간: " + (System.currentTimeMillis() - t) + " ms") ;
} // 실행 시간 : 4 ms
동일 타입 전달과 오토 박싱 변환을 100만건 기준으로
성능 비교를 하면 약 5배의 성능 차이가 난다.
따라서 불필요한 박싱 & 언박싱은 제거해야 한다.

'Java' 카테고리의 다른 글

JUnit  (0) 2023.07.30
Thread in Java  (0) 2023.07.17
문자열  (0) 2023.07.17
Call By Value & Call By Reference  (0) 2023.07.17
JDK, JRE, JVM  (0) 2023.07.17