static Random rnd = new Random();
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}
이 메서드는 무작위 수를 출력해 줄것 같지만, n이 별로 크지 않은 2의 제곱수라면 얼마 지나지 않아서 같은 수열이 반복된다.
또 이 메서드의 결함은 지정한 범위 바깥의 수가 종종 나올 수 있다. rdn.nextInt()가 반환한 값을 Math.abs를 이용해 음수가 아닌 정수로 매핑하기 때문이다.
자바 7부터는 Random 보다는 ThreadLocalRandom으로 대체하는게 좋다. 더 고품질의 무작위 수를 생성할 뿐 아니라, 속도도 더 빠르다
표준 라이브러리를 썼을 때 얻는 이점은 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 된다는 것이다. 또 따로 노력하지 않아도 성능이 지속해서 개선된다는 점이다. 사용자가 많고, 업계 표준 벤치마크를 사용해 성능을 확인하기 때문에, 표준 라이브러리 제작자 들은 더 나은 방법을 꾸준히 모색할 수밖에 없다. 마지막으로 기능이 점점 많아진다는 것이다. 라이브러리에 부족한 부분이 있다면 개발자 커뮤니티에서 이야기가 나오고 논의된 후 다음 릴리스에 해당 기능이 추가되곤 한다.
이러한 이점을 비춰볼 때 표준라이브러리를 사용하지 않을 이유는 없어보인다. 하지만 실상은 많은 프로그래머들이 실제로 직접 구현해서 쓰고 있다. 왜일까?
그런 기능이 있는지 모르기 때문이다 메이저 릴리즈마다 주목할만한 수많은 기능이 라이브러리에 추가된다. 이는 api문서를 통해 확인 가능하다.
너무 많은 내용을 일일히 확인하기는 어렵겠지만, 적어도 자바 프로그래머라면 java.lang, java.util, java.io와 그 하위 패키지들에는 익숙해 질 필요가 있다.
때때로 라이브러리가 여러분에게 필요한 기능을 충분히 제공하지 못할 수 있다. 더 전문적인 기능을 요구할수록 이런 일이 더 자주 생길 것이다. 우선은 라이브러리를 사용하려 시도해보자. 어떤 영역의 기능을 제공하는지 살펴보고, 여러분이 원하는 기능이 아니라 판단되면 대안을 사용하자
바퀴를 다시 발명하지 말자. 아주 특별한 나만의 기능이 아니라면 누군가 이미 만들어 놓았을 가능성이 크다. 있다면 쓰면된다. 있는지 잘모르겟더라도 일단 찾아보자. 일반적으로 라이브러리의 코드는 여러분이 직접 작성한 것보다 품질이 좋고, 점차 개선될 가능성이 크다.