-
Java - Boxing & UnboxingLanguage/Java 2022. 2. 19. 12:06
Primitive Type & Wrapper Class
Primitive Type의 종류
타입 크기 boolean 1 byte char 2 byte byte 1 byte short 2 byte int 4 byte long 8 byte float 4 byte double 8 byte Wrapper Class의 종류
기본 타입 래퍼 클래스 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double
Boxing & Unboxing
Boxing(박싱)
int i = 10; Integer number = new Integer(i);
- 박싱이란 기본 타입 데이터에 대응하는 Wrapper 클래스를 만드는 동작이다.
Unboxing(언박싱)
Integer num = new Integer(0); int i = num.intValue();
- 언박싱이란 Wrapper 클래스에서 기본 타입 데이터로 변환하는 것이다.
Auto Boxing & Auto Unboxing
오토 박싱 & 오토 언박싱
// ========== 오토 박싱 ========== int i = 10; Integer num = i; // ========== 오토 언박싱 ========== Integer num = new Integer(10); int i = num;
- JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱이 필요한 상황에 자동으로 처리를 해준다.
- 편의성을 위해 오토 박싱과 언박싱이 제공되고 있지만, 내부적으로는 추가 연산 작업을 거치게 된다.
- 따라서, 오토 박싱과 언박싱이 일어나지 않도록 동일한 타입 연산이 이루어지도록 해야 한다.
오토 박싱 연산
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"); }
- 위 코드는 오토 박싱이 발생하는 연산이며, 총 실행 시간은 19ms가 걸린다.
동일 타입 연산
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"); }
- 위 코드는 동일 타입 연산에 대한 코드이며, 총 실행 시간은 4ms가 걸린다.
- 오토 박싱 연산과 비교해 볼 때, 같은 데이터 100만 건 기준으로 약 5배의 성능 차이가 난다.
- 따라서, 서비스를 개발하면서 불필요한 오토 캐스팅이 일어나는지 확인하는 습관을 가져야 한다.
728x90'Language > Java' 카테고리의 다른 글
Java - 캐스팅(Casting) (0) 2022.02.19 Java - 문자열 클래스 (0) 2022.02.19 Java - Primitive Type & Reference Type (0) 2022.02.19 Java - 인터페이스 (0) 2021.12.08 Java - 객체지향언어 (0) 2021.12.07