[아이템 59] 라이브러리를 익히고 사용하라.
0부터 명시한 수 까지 무작위 정수를 하나 생성하려고 합니다. 다음은 흔히 마주할 수 있는 문제있는 메서드입니다.
|
|
이 코드에는 세 가지 문제점이 있습니다. 첫 번째. n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복됩니다. 두 번째, n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 반복됩니다. n값이 크면 이 현상은 더 두드러집니다.
다음 코드는 선택한 버뮈에서 무작위 수를 백만개를 생성한 뒤, 그 중 중간 값보다 작은 게 몇 개인지를 출력합니다.
|
|
이상적으로는 50만개가 나와야하지만 계속 실행해봐도 666,666개와 가까운 값을 얻습니다. 이는 random 메서드의 결함인데 지정한 범위 ‘바깥’수가 종종 튀어나올 수 있습니다. rnd.nextInt()가 반환한 값을 Math.abs를 이용해 음수가 아닌 정수로 매핑하기 때문입니다. 라이브러리를 제대로 익히지 않고 사용하기 때문에 나타난 문제입니다.
자바 7부터는 Random대신 ThreadLocalRandom
을 사용하는 게 좋습니다. Random보다 속도도 더 빠르고 고품질의 무작위 수를 생성하기 때문입니다. 한편 포크-조인 풀이나 병렬 스트림에서는 SplittableRandom을 사용합시다.
라이브러리를 익히고 사용하면 다음과 같은 이점들도 추가로 있습니다. 노력을 하지 않아도 성능이 지속해서 개선 될 수 있습니다. 또한 기능이 점점 많아진다는 것입니다. 라이브러리에 부족한 부분이 있다면 논의된 후 다음 릴리즈에 해당 기능이 추가도곤 합니다. 마지막으로 여러분으 작성한 코드가 많은 사람에게 낯익은 콛,가 됩니다. 결국 유지 보수하기가 쉬워지고 가독성이 좋아집니다.