ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Boxing & Unboxing
    Language/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

    댓글

Designed by Tistory.