베어_
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)

블로그 메뉴

    공지사항

    인기 글

    태그

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

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    개발서적/Effective Java

    [Effective Java] 라이브러리를 익히고 사용하라

    2023. 6. 2. 08:12

    흔하지만 문제가 많은 코드

    다음 random() 클래스를 사용한 코드를 보자.

    static Random rnd = new Random();
    
    static int random(int n) {
        return Math.abs(rnd.nextInt()) % n;    
    }

    이 코드는 다음과 같은 문제가 있다.

    1. n이 크지 않은 2의 제곱수라면 같은 수열이 반복된다.
    2. n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다.
    3. 지정한 범위 바깥의 수가 나올 수 있다. (반환한 값을 Math.abs를 이용해 음수가 아닌 정수로 매핑하기 때문)

    이 결함을 해결하기 위해 Random.nextInt(int) 메서드를 사용할 수 있다.

    자바 7부터는 Random을 더 이상 사용하지 않는 것이 좋다. ThreadLocalRandom으로 대체하면 대부분 잘 동작하며 더 고품질의 무작위 수를 생성해주며 더 빠르기까지 하다. 포크-조인 풀이나 병렬 스트림에서는 SplittableRandom을 사용하자.

    이처럼 표준 라이브러리를 사용하면 지속적인 기능이 추가되고 개발되고 안정성까지 검증이 된다.

    표준 라이브러리를 사용하자.

    1. 표준 라이브러리를 사용하면 전문가의 지식과 경험을 활용할 수 있다.
    2. 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 된다.
    3. 따로 노력하지 않아도 성능이 지속해서 개선된다.
    4. 기능이 점점 많아진다.
    5. 작성한 코드가 많은 사람에게 낯익은 코드가 된다.

    중요한 표준 라이브러리

    1. java.lang
    2. java.util
    3. java.io
    4. java.util.concurrent
    저작자표시 비영리 변경금지 (새창열림)
      '개발서적/Effective Java' 카테고리의 다른 글
      • [Effective Java] 박싱된 기본 타입보다는 기본 타입을 사용하라
      • [Effective Java] 정확한 답이 필요하다면 float와 double은 피하라
      • [Effective Java] 전통적인 for 문보다는 for-each 문을 사용하라
      • [Effective Java] 지역변수의 범위를 최소화하라
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바