무작위 정수 만들기
무작위 정수를 하나 생성한다고 해보자
1 | static Random rnd = new Random(); |
괜찮아 보이지만 3가지의 문제를 내포하고 있다.
n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다.
n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다.
1 | public static void main(String[] args) { |
random 메서드가 이상적으로 동작한다면 약 50만개가 출력되어야 하지만, 실제로는 666,666에 가까운 값을 얻는다.
무작위로 생성된 수 중에서 2/3 가량이 중간값보다 낮은 쪽으로 쏠린 것이다.
- 지정한 범위 바깥의 수가 종종 튀어나올 수 있다. rnd.nextInt()가 반환한 값을 Math.abs를 이용해 음수가 아닌 정수로 매핑하기 때문이다.
표준 라이브러리를 사용하면 다른 프로그래머들의 경험을 활용할 수 있다.
- 메서드의 동작 방식은 몰라도 알고리즘에 능통한 개발자나, 여러 분야의 전문가가 설계와 구현에 시간을 들여 개발한 것이다.
- 버그가 발생되더라도 다음 릴리스에 수정 보완 개선이 될 수 있다.
- 표준 라이브러리를 사용하면 그 코드를 작성한 전문가의 지식과 여러분보다 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있다.
- 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 되고 어플리케이션 기능 개발에 집중할 수 있다.
- 따로 노력하지 않아도 릴리즈가 나올 때 마다 성능이 지속해서 개선된다.
- 기능이 점점 많아진다. 개발자 커뮤니티에서 나온 이야기를 바탕으로 논의 후 다음 릴리즈에 기능이 추가되곤 한다.
- 라이브러리를 사용하면 많은 사람들에게 낯익은 코드가 된다. 다른 개발자들이 유지보수 하기 쉬워지고 재사용성이 높아진다.
메이저 버전 릴리즈 마다 수많은 기능이 추가된다.
- 자바는 메이저 릴리즈마다 새로운 기능을 설명하는 웹페이지를 공시한다.
- 한 번쯤은 읽어볼만 하다
- 너무 많아서 읽기 힘든 경우에는 java.lang, java.util, java.io와 하위 패키지들에는 익숙해져야 한다.
- 컬렉션 프레임워크나 concurrent 패키지는 알아두면 도움이 도니다.
예시 - transferTo 메서드를 이용해 URL 내용 가져오기
1 | public static void main(String[] args) throws IOException { |
- java 9 버전 부터 URL정보를 쉽게 출력해 주는 transferTo 메서드를 제공한다.
정리
- 라이브러리가 전문적인 기능을 제공해 주지 못할수도 있지만, 라이브러리를 일단 사용해보자
- 특별한 기능이 아니라면 누군가 라이브러리로 만들어 두었을 가능성이 높다.
일단 라이브러리가 있는지 찾아보자 - 일반적으로 라이브러리의 코드는 개발자가 작성한 것보다 품질이 좋고 개선의 여지가 있다.
- 라이브러리 코드는 주목을 많이 받고 개발자 커뮤니티에서 문제점이 많이 거론되므로 코드 품질이 점차 좋아진다.
참고
- Effective Java 3rd Edition - Item 59. 라이브러리를 익히고 사용하라