Skip to content

Latest commit

 

History

History
98 lines (56 loc) · 2.55 KB

item61.md

File metadata and controls

98 lines (56 loc) · 2.55 KB

61. 박싱된 기본 타입보다는 기본 타입을 사용하라


기본 타입과 박싱된 기본 타입의 차이점과 성능적인 이슈를 다룹니다.

  • 기본타입 int, double, boolean, 참조타입 string, list
  • 기본 타입에는 대응하는 참조 타입이 하나씩 있음 → 박싱된 기본 타입

.

  • 기본 타입

    값을 담는 자료형

    int, double, boolean

    각각의 크기와 표현 범위가 정해짐

  • 박싱된 기본 타입

    해당 기본 타입을 래핑한 참조 타입

    Integer, Double, Boolean

.

기본 타입은 값만을 담고 있으므로 메모리 사용량과 계산 속도가 박싱된 기본 타입에 비해 효율적이다.

따라서, 성능이 중요한 상황에서는 기본 타입을 사용하는 것이 좋다.

.

  • 주된 차이 3가지

    기본 타입 박싱된 기본 타입
    차이1 값만 가지고 있음 값+식별성 가짐, 값이 같아도 서로 다르다고 식별
    차이2 값 언제나 유효 null값 가질 수 있음
    차이3 시간, 메모리 더 효율적

    주의해서 사용하지 않으면 문제 발생할 수 있음

.

  • 차이2를 신경쓰지 않았을 때

    public class Unbelievable {
        static Integer i;
    
        public static void main(String[] args) {
            if (i == 42)
                System.out.println("믿을 수 없군!");
        }
    }

    i == 42 를 할 때, null 참조를 언박싱하게 되면서 NPE가 터진다.

    i의 타입을 Integer에서 int로 바꿔야 한다

.

  • 차이3을 신경쓰지 않았을 때

    public static void main(String[] args) {
        Long sum = 0L;
        for (long i = 0; i <= Integer.MAX_VALUE; i++) {
            sum += i;
        }
        System.out.println(sum);
    }

    박싱과 언박싱이 반복해서 일어나기 때문에 체감될 정도로 성능이 느려진다. ( sum = sum + i )

.

박싱된 기본 타입은 기본 타입을 참조 타입으로 사용할 수 있게 해주고, 제네릭 타입의 타입 파라미터로 사용할 수 있게 해줍니다. 또한, null 값을 표현할 수 있어 유용합니다.

따라서, 기본 타입과 박싱된 기본 타입 중 어떤 것을 사용할지는 상황에 따라 다릅니다.

.

  • 박싱된 기본 타입을 쓰는 케이스
    • 컬렉션의 원소, 키 값으로 사용
    • 리플렉션을 통해 메서드를 호출할 때 사용