👣 개요
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 |