-
[이펙티브 자바] item 59 - 라이브러리를 익히고 사용하라개발서적읽기/Effective Java - temp 2020. 9. 3. 19:23
■표준 라이브러리의 장점 1 :: 수많은 프로그래머들의 경험이 녹아있다
다음은 무작위 정수 하나를 생성하는 코드이다.
static Random rnd = new Random();
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}이 코드는 세 가지 문제점을 가지고 있다.
1. n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다.
2. n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다.
3. 지정한 범위 바깥의 수가 종종 생성될 수 있다.
이렇게 직접 작성하는 것은 문제점을 가지고 있을 확률이 크다.
직접 작성하는 방법 대신 라이브러리를 사용하면 안전하게 원하는 기능을 구현할 수 있다.
Random.nextInt(int) 메소드는 위 문제점을 해결한 라이브러리 유틸이다. 알고리즘에 능통한
개발자가 설계하고 구현했고, 이 분야의 여러 전문가가 안전성과 정확성을 검증해줬다.
이렇게 표준 라이브러리를 사용하면 그 코드를 작성한 전문가의 지식과 우리보다 앞서
사용한 다른 프로그래머들의 경험을 활용할 수 있다.
자바 7부터는 Random을 더 이상 사용하지 않는게 좋다.
ThreadLocalRandom이라는 성능이 개선된 유틸을 사용하는 것을 추천한다.
■표준 라이브러리의 장점 2 :: 시간 절약
핵심적인 서비스 구현에 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 된다.
프로그래머들은 하부 공사를 하기보다는 애플리케이션 기능 개발에 집중하고 싶어한다.
■표준 라이브러리의 장점 3 :: 라이브러리 성능 개선
표준 라이브러리는 성능이 지속해서 개선된다. 사용자가 많고 업계 표준 벤치마크를 사용해
성능을 확인하기 때문에 표준 라이브러리 제작자들은 더 나은 방법을 꾸준히 모색할 수밖에
없다. 자바 플랫폼 라이브러리의 많은 부분이 수 년에 걸쳐 지속해서 다시 작성되며, 때론
성능이 극적으로 개선되기도 한다.
■표준 라이브러리의 장점 4 :: 점점 많아지는 기능
라이브러리에 부족한 부분이 있다면 개발자 커뮤니티에서 이야기가 나오고 논의된 후 다음
릴리스에 해당 기능이 추가되곤 한다.
■표준 라이브러리의 장점 5 :: 범용적인 코드 작성 가능
라이브러리를 사용하면 많은 사람에게 낯익은 코드가 된다. 자연스럽게 다른 개발자들이 더
읽기 좋고, 유지보수하기 좋고, 재활용하기 쉬운 코드가 된다.
■그러니 표준 라이브러리를 사용하자!
많은 프로그래머들은 좋은 라이브러리가 있는지 잘 몰라서 직접 구현해서 쓰곤 한다.
라이브러리를 사용하는 습관을 기르면 좋을 것 같다. 라이브러리의 수많은 기능들을
설명해놓은 것이 각 라이브러리의 메이저 릴리즈이다. 이 메이저 릴리즈를 읽으면 좋다.
아래의 코드를 통해 라이브러리의 장점을 확인해보자.
public static void main(String[] args) throws IOException {
try (InputStream in = new URL(args[0]).openStream()) {
in.transferTo(System.out);
}
}예전에는 작성하기가 까다로운 기능이었지만, 자바 9에서 InputStream에 추가된 transferTo
메서드를 사용하면 쉽게 구현할 수 있다.
라이브러리가 너무 방대하여 모든 API 문서를 공부하기는 벅차겠지만 자바 프로그래머라면
적어도 java.lang, java.util, java.io와 그 하위 패키지들에는 익숙해져야 한다. 다른
라이브러리들은 필요할 때마다 익혀야 한다. 라이브러리는 매년 아주 빠르게 성장하고
있으니 모든 기능을 요약하는 건 무리다.
몇 가지 언급해둘 만한 라이브러리가 있다. 컬렉션 프레임워크와 스트림 라이브러리다.
java.util.concurrent의 동시성 기능도 마찬가지로 알아두면 큰 도움이 된다. 이 패키지는
멀티스레드 프로그래밍 작업을 단순화해주는 고수준의 편의 기능은 물론, 능숙한 개발자가
자신만의 고수준 개념을 직접 구현할 수 있도록 도와주는 저수준 요소들을 제공한다.
(java.util.concurrent의 고수준 개념은 item 80과 item 81에서 다룬다)
때때로 필요한 기능을 라이브러리가 충분히 제공하지 못할 수 있다. 더 전문적인 기능을
요구할수록 이런 상황이 더 자주 생길 것이다. 우선은 라이브러리를 사용하려 시도해보자.
어떤 영역의 기능을 제공하는지 살펴보고, 원하는 기능이 아니라 판단되면 대안을 사용하자.
어떤 라이브러리든 제공하는 기능은 유한하므로 항상 빈 구멍이 있기 마련이다. 자바 표준
라이브러리에서 원하는 기능을 찾지 못하면, 그다음 선택지는 고품질의 서드파티
라이브러리가 될 것이다. 구글의 멋진 구아바 라이브러리가 대표적이다. 적합한 서드파티
라이브러리도 찾지 못했다면, 다른 선택이 없으니 직접 구현하자.
'개발서적읽기 > Effective Java - temp' 카테고리의 다른 글
[이펙티브 자바] item 74 - 메서드가 던지는 모든 예외를 문서화하라 (0) 2020.09.18 [이펙티브 자바] item 66 - 네이티브 메서드는 신중히 사용하라 (0) 2020.09.11 [이펙티브 자바] item 52 - 다중정의는 신중히 사용하라 (0) 2020.08.28 [이펙티브 자바] item 45 - 스트림은 주의해서 사용하라 (0) 2020.08.21 [이펙티브 자바] item 38 - 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 (0) 2020.08.15 댓글