흔하지만 문제가 많은 코드
다음 random() 클래스를 사용한 코드를 보자.
static Random rnd = new Random();
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}
이 코드는 다음과 같은 문제가 있다.
- n이 크지 않은 2의 제곱수라면 같은 수열이 반복된다.
- n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다.
- 지정한 범위 바깥의 수가 나올 수 있다. (반환한 값을 Math.abs를 이용해 음수가 아닌 정수로 매핑하기 때문)
이 결함을 해결하기 위해 Random.nextInt(int) 메서드를 사용할 수 있다.
자바 7부터는 Random을 더 이상 사용하지 않는 것이 좋다. ThreadLocalRandom으로 대체하면 대부분 잘 동작하며 더 고품질의 무작위 수를 생성해주며 더 빠르기까지 하다. 포크-조인 풀이나 병렬 스트림에서는 SplittableRandom을 사용하자.
이처럼 표준 라이브러리를 사용하면 지속적인 기능이 추가되고 개발되고 안정성까지 검증이 된다.
표준 라이브러리를 사용하자.
- 표준 라이브러리를 사용하면 전문가의 지식과 경험을 활용할 수 있다.
- 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 된다.
- 따로 노력하지 않아도 성능이 지속해서 개선된다.
- 기능이 점점 많아진다.
- 작성한 코드가 많은 사람에게 낯익은 코드가 된다.
중요한 표준 라이브러리
- java.lang
- java.util
- java.io
- java.util.concurrent