Autoboxing

초보개발·2022년 7월 11일
0

JAVA

목록 보기
10/15

primitive type & Wrapper Class


Wrapper class는 기본 자료형은 reference type이 아니기 때문에, 해당 기본 자료형을 객체로 표현해야할 경우 사용하게 된다.

primitive typeWrapper class
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

Autoboxing


JAVA 컴파일러는 Primitive type과 Wrapper 객체 간의 변환을 자동으로 해주는 작업을 Autoboxing이라고 한다. 오토박싱은 기본 자료형을 wrapper 객체로 변환하는 작업을 boxing, 그 반대는 unboxing이라고 한다.

아래는 int(primitive type)과 Integer(Wrapper class)간의 오토박싱 예제이다.

    Integer wrapperClass = 123;
    int primitiveType = wrapperClass; // unboxing
    System.out.println("primitiveType = " + primitiveType); // 123
}
public static void main(String[] args) {
    int primitiveType = 9;
    Integer WrapperClass = primitiveType; // boxing
    System.out.println("WrapperClass = " + WrapperClass); // 9
}

불필요한 Autoboxing을 피해야 하는 이유


public static long sumFunction() {
    Long total = 0L; // wrapper class
        
    for(long i = 0; i < Integer.MAX_VALUE; i++)
        total += i; // i는 primitive type
        
    return total;
}

Long 타입의 total에 long 타입인 i를 더하는 코드이다. 여기서 JAVA 컴파일러는 total += i;부분을 total += Long.valueOf(i);로 바꿔 계산한다. 즉, 저 부분이 실행될 때마다 필요없는 Long 타입의 객체를 생성한다는 말이다.

  • Long total에 더할 경우 소요 시간: 6404ms
  • long total에 더할 경우 소요 시간: 884ms

소요 시간이 크게 차이가 난다. 따라서 entity의 PK 자료형이나 null 값을 다뤄야하는 상황이 아니라면 불필요한 오토박싱을 수행하지 않도록 주의할 필요가 있다.

0개의 댓글