ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [이펙티브 자바] 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 80item 81에서 다룬다)



    때때로 필요한 기능을 라이브러리가 충분히 제공하지 못할 수 있다. 더 전문적인 기능을 


    요구할수록 이런 상황이 더 자주 생길 것이다. 우선은 라이브러리를 사용하려 시도해보자.


    어떤 영역의 기능을 제공하는지 살펴보고, 원하는 기능이 아니라 판단되면 대안을 사용하자.


    어떤 라이브러리든 제공하는 기능은 유한하므로 항상 빈 구멍이 있기 마련이다. 자바 표준


    라이브러리에서 원하는 기능을 찾지 못하면, 그다음 선택지는 고품질의 서드파티 


    라이브러리가 될 것이다. 구글의 멋진 구아바 라이브러리가 대표적이다. 적합한 서드파티


    라이브러리도 찾지 못했다면, 다른 선택이 없으니 직접 구현하자.

    댓글

Designed by Tistory.