베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 코드업
    • leetcode
    • 데이터베이스
    • 자바8
    • 자바
    • 스프링시큐리티
    • 운영체제
    • C++
    • 함수형인터페이스
    • BFS
    • jpa
    • 스프링
    • 백준
    • java
    • 이펙티브자바
    • 알고리즘
    • Spring
    • 스레드
    • dfs
    • 토비스프링

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    개발서적/Effective Java

    [Effective Java] 박싱된 기본 타입보다는 기본 타입을 사용하라

    2023. 6. 2. 08:16

    자바의 데이터 타입

    1. 기본 타입 : int, double, boolean
    2. 참조 타입 : String, List, 각각의 기본 대응되는 박싱 타입

    오토박싱과 오토언박싱 덕분에 기본 타입과 박싱 타입을 크게 구분하지 않고 사용할 수 있지만. 이 둘 사이의 분명한 차이는 존재한다.

    기본 타입 vs 박싱 타입

    1. 기본 타입은 값만 가지고 있지만, 박싱 타입은 값에 더해 식별성이란 속성을 갖는다.
      • 값이 같아도 서로 다르다고 식별될 수 있다.
    2. 기본 타입의 값은 언제나 유효하나, 박싱된 기본 타입은 유효하지 않은 값(null)을 가질 수 있다.
    3. 기본 타입이 박싱된 기본 타입보다 시간과 메모리 사용면에서 더 효율적이다.

    박싱된 기본 타입에 == 연산자를 사용할 땐 주의하라.

    다음 코드를 이용하여 백만 개짜리 리스트를 넣거나 중복이 있는 데이터를 넣어도 잘 동작한다.

    Comparator<Integer> naturalOrder =
            (i, j) -> (i < j) ? -1 : (i == j ? 0 : 1);

    하지만 naturalOrder.compare(new Integer(42), new Integer(42))를 실행하면 이 코드의 결함을 알 수 있다.

    실무에서 이와 같이 기본 타입을 다루는 비교자가 필요하다면 Comparator.naturalOrder()를 사용하자.

    박싱된 타입의 성능 저하

    다음은 sum의 타입을 박싱 타입인 Long으로 선언함으로써 박싱과 언박싱이 반복해서 일어나 성능이 저하된다.

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

    박싱 타입을 써야 하는 경우

    1. 컬렉션의 원소, 키, 값으로 쓴다.
      • 컬렉션은 기본 타입을 담을 수 없다.
      • 매개변수화 타입이나 매개변수화 메서드의 타입 매개변수로는 박싱된 타입을 써야 한다.
    2. 리플렉션을 통해 메서드를 호출할 때 쓴다.
    저작자표시 비영리 변경금지 (새창열림)
      '개발서적/Effective Java' 카테고리의 다른 글
      • [Effective Java] 리플렉션보다는 인터페이스를 사용하라
      • [Effective Java] 객체는 인터페이스를 사용해 참조하라
      • [Effective Java] 정확한 답이 필요하다면 float와 double은 피하라
      • [Effective Java] 라이브러리를 익히고 사용하라
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바