본문 바로가기
Java/Effective Java 3E

[이펙티브자바 3판] ITEM59. 라이브러리를 익히고 사용하라

by 잭피 2021. 2. 6.

이번장의 핵심은...

바퀴를 다시 발명하지 말자

즉, 라이브러리 코드는 개발자 각자가 작성하는 것보다 주목을 훨씬 많이 받으므로 코드 품질도 그만큼 높아진다


표준 라이브러리를 사용하지 않는다면?

ex) 무작위 정수를 하나 생성하는 코드를 만들어볼까요? (값의 범위는 0~명시한 수)

// 흔하지만 문제가 심각한 코드
static Random rnd = new Random();
static int random(int n) {
	return Math.abs(rnd.nextInt()) % n;	
}

3가지의 문제를 내포하고 있습니다

1. n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복됩니다

2. n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환됩니다

3. n값이 크면 이 현상은 더 두드러집니다 

 

이러한 이슈를 우리가 직접 해결할 필요는 없습니다

이미 Random.nextInt(int)가 해결해두었습니다

 

표준 라이브러리를 사용하면 그 코드를 작성한 전문가의 지식과 여러분보다 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있습니다

 

자바 7부터는 Random을 더 이상 사용하지 않는게 좋습니다

ThreadLocalRandom으로 대체하면 대부분 잘 작동합니다

Random보다 더 고품질의 무작위 수를 생성할 뿐만 아니라 속도도 더 빠릅니다

포크-조인 풀이나 병렬 스트림에서는 SplittableRandom을 사용하면 더 좋습니다

 

표준 라이브러리의 이점

1. 전문가의 지식과 앞서 사용한 다른 프로그래머들의 경험을 활용할 수 있습니다

2. 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 됩니다

3. 따로 노력하지 않아도 성능이 지속해서 개선됩니다

4. 기능이 점점 많아집니다

5. 작성한 코드가 많은 사람에게 낯익은 코드가 됩니다

 

자바 프로그래머라면 적어도 java.lang, java.util, java.io와 그 하위 패키지들에는 익숙해져야 한다

 

라이브러리는 매년 아주 빠르게 성장하고 있으니 모든 기능을 요약하는 건 무리입니다

하지만 아래와 같은 라이브러리는 알아두면 좋습니다

 

- 컬렉션 프레임워크

- 스트림 라이브러리

- java.util.concurrent

 

때때로 라이브러리가 여러분에게 필요한 기능을 충분히 제공하지 못한다면, 고품질의 서드파티 라이브러리를 사용하거나 그래도 없다면 직접 구현합시다

댓글