Wrapper class는 기본 자료형은 reference type이 아니기 때문에, 해당 기본 자료형을 객체로 표현해야할 경우 사용하게 된다.
primitive type | Wrapper class |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
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
}
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 타입의 객체를 생성한다는 말이다.
소요 시간이 크게 차이가 난다. 따라서 entity의 PK 자료형이나 null 값을 다뤄야하는 상황이 아니라면 불필요한 오토박싱을 수행하지 않도록 주의할 필요가 있다.