티스토리 뷰

코드 품질에도 규모의 경제가 적용된다.

 

코드를 직접 작성하면서 프로그램이 실패하거나, 문제를 해결하고 싶어도 현상을 재현하기 쉽지 않은 경험이 있을 것이다.

예를 들면 무작위 정수 하나를 생성하고 싶다.

나는 이 책을 읽기 전까지 다음과 같은 코드로 작성했다.

static Random rnd = new Random();

static int random(int n){
	return Math.abs(rnd.nextInt()) % n;
}

하지만 이 코드에는 결함이 3가지 있다.

첫 번째, n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다.

두 번째, n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다. (n값이 크면 이 현상은 더 두드러진다)

세 번째, random 메서드의 결함으로 지정한 범위 바깥의 수가 종종 튀어나올 수 있다.

 

만약 이 문제를 해결하고 싶다면 의사 난수 생성기, 정수론, 2의 보수 계산 등 여러 방법을 동원해야 할 것이다.

하지만 우리는 라이브러리가 있기 때문에 직접 구현하지 않아도 된다.

Random 메서드 대신 Random.nextnt(int)가 이미 해결해놨다.

특히나 자바 7부터는 Random을 더 이상 사용하지 않는 게 좋다.

ThreadLocalRandom으로 대체하면 대부분 잘 작동한다. 

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

 

이러한 라이브러리들을 사용하면 뭐가 좋을까?

👍 라이브러리의 장점

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

 

두 번째, 핵심적인 일과 크게 관련 없는 문제를 해결하느라 시간을 허비하지 않아도 된다.

 

세 번째, 따로 노력하지 않아도 성능이 지속해서 개선된다.

자바 플랫폼 라이브러리의 많은 부분이 수년에 걸쳐 지속해서 다시 작성되며, 때론 성능이 극적으로 개선되기도 한다. 

 

네 번째, 기능이 점점 많아진다.

라이브러리에 부족한 부분이 있다면 개발자 커뮤니티에서 이야기가 나오고 논의된 후 다음 릴리스에 해당 기능이 추가되곤 한다.

 

마지막으로, 다른 개발자들이 더 읽기 좋고, 유지 보수하기 좋고, 재활용하기 쉬운 코드가 된다.

 

❓ 그럼에도 안 쓰는 이유?

이 좋은걸 안쓰는 이유는 단순히 몰라서이다.

아마도 라이브러리에 그런 기능이 있는지 모르기 때문일 것이다.

 

메이저 릴리스마다 주목할 만한 수많은 기능이 라이브러리에 추가된다. 관심을 가지고 한 번씩 꼭 읽어보자.

 

모든 API문서를 공부하기는 벅차겠지만 다음과 같은 라이브러리들에는 익숙해지자.

  • java.lang
  • java.util
  • java.io
  • 그 하위 패키지들
  • 컬렉션 프레임워크
  • 스트림 라이브러리
  • java.util.concurrent (동시성 기능) -> 멀티스레드 프로그래밍 작업을 단순화해주는 고수준의 편의 기능

 

✔ 때때로 라이브러리가 필요한 기능을 충분히 제공하지 못한다면?

그래도 우선 라이브러리를 사용하려 시도해보자.

자바 표준 라이브러리에서 원하는 기능을 찾지 못한다면, 그다음 선택지는 고품질의 서드파티 라이브러리를 찾아본다.

그럼에도 불구하고 못찾았다면, ... 직접 구현하자 ...........

 

 

댓글
공지사항
최근에 올라온 글