peaches-book-study / effective-java

이펙티브 자바 3/E
0 stars 2 forks source link

Item 59. 라이브러리를 익히고 사용하라 #57

Open heon118 opened 2 months ago

heon118 commented 2 months ago

Chapter : 9. 일반적인 프로그래밍 원칙

Item : 59. 라이브러리를 익히고 사용하라

Assignee : heon118


🍑 서론

흔하지만 문제가 심각한 코드

static Random rnd = new Random();

static int random(int n) {
    return Math.abs(rnd.nextInt()) % n;
}
  1. n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다.
  2. n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다. n이 크면 이 현상이 더 두드러진다.

무작위 수 백만 개 중, 중간 값보다 작은 것의 개수

public static void main(String[] args) {
    int n = 2 * (Integer.MAX_VALUE / 3);
    int low = 0;
    for(int i = 0; i < 1000000; i++)
        if(random(n) < n / 2)
            low++;
    System.out.println(low);
}
  1. 지정한 범위 '바깥'의 수가 종종 나올 수 있다.
    • rnd.nextInt()가 반환한 값을 Math.abs를 이용해 음수가 아닌 정수로 매핑하기 때문

이런 문제들을 Random.nextInt(int)에서 해결해놨다. 따라서 표준 라이브러리를 사용하면 된다.

🍑 본론

표준 라이브러리를 사용했을 때의 이점

첫 번째, 코드를 작성한 전문가의 지식과 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있다.

두 번째, 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 된다.

세 번째, 따로 노력하지 않아도 성능이 지속해서 개선된다.

네 번째, 기능이 점점 많아진다.

마지막, 작성한 코드가 많은 사람에게 낯익은 코드가 된다.

사람들은 라이브러리에 원하는 기능이 있는지 모르고 구현해서 사용한다.

🍑 결론

라이브러리가 필요한 기능을 충분히 제공하지 못할 수 있다.
우선은 라이브러리를 사용하려 시도해보고 원하는 기능이 아니라 판단되면 대안을 사용하자.

Referenced by

youngkimi commented 2 months ago

(양심고백) 랜덤 가챠는 실은 랜덤이 아님