개발하는 두더지

[Effective Java 규칙47] 어떤 라이브러리가 있는지 파악하고, 활용하라 본문

Java,Android

[Effective Java 규칙47] 어떤 라이브러리가 있는지 파악하고, 활용하라

덜지 2018. 10. 23. 15:29

[Effective Java 규칙47] 어떤 라이브러리가 있는지 파악하고, 활용하라

Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.


public class RandomTest {

private static final Random rnd = new Random();
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}
}

난수를 만들라고하면 대부분의 프로그래머들은 static으로 선언된 random() 메서드처럼 만들 것이다. 

하지만 이 메서드에는 3가지 문제가 있다. 

첫번째는 n이 2의 제곱수일 경우 중복된 난수값이 나온다.

두번째는 어떤 수는 다른 수들보다 평균적으로 자주 등장할 것이다. 

세번째는 드문 경우지만 지정된 구간 밖에 있는 난수가 나올때가 있다. 


이러한 문제들을 해결한 랜덤 메서드를 만들려면 가상난수 생성기, 수 이론(number theory), 2의 보수 연산에 대해서 많이 알아야 한다. 그러나 Random.nextInt(int) 가 자바 1.2버전부터 생겼는데 위의 문제를 해결한 자바의 기본 라이브러리 API 인 것이다.

이 메서드는 알고리즘 지식을 갖춘 고급 엔지니어가 꽤 많은 시간을 들여 설계하고 구현하고 테스트한 다음에 해당 분야 전문가에게 확인한 메서드이다. 그 뒤에 베타 테스트를 거쳐 릴리즈되었고, 반세기 넘게 수백만의 프로그래머가 사용했는데 아직 어떤 문제도 발생하지 않았다. 


이렇게 표준 라이브러리를 사용하면 그 라이브러리를 개발한 전문가의 지식뿐만 아니라 그 라이브러리를 사용한 사람들의 경험을 활용할 수 있다. 또 다른 장점은 문제에 대한 해결 방법을 찾아서 설계하고 테스트하고 적용하는데 시간을 투자할 필요가 없다는 점이다. 또한 라이브러리는 성능이 점차 업그레이드 된다. 프로그래머들의 피드백을 받아 없었던 기능을 만들어주고, 버그도 수정되고 트렌드를 따라 새로운 플랫폼, 프레임워크에서 사용할 수 있도록 업데이트 된다. 


바퀴를 다시 발명하지 말라( don't reinvent the wheel) 라는 말이 있다. 검색해보면 웬만하면 구현하고자 하는 기능을 가진 라이브러리들이 많다. 안정적이고 검증되고 많은 사람들이 쓰는 라이브러리이므로 믿고써도 된다. 라이브러리 코드가 받는 관심의 양이 대부분의 개발자가 해당 기능을 개발하는 데 쏟을 수 있는 노력의 양보다 규모 경제학 관점에서(economies of scale) 더 크다는 것을 말하는 것이다.





















Comments