표준 라이브러리를 사용하면 좋은점

선대 개발자들의 노고를 누리자

• 표준 라이브러리를 사용하면 그 코드를 작성한 전문가의 지식과, 앞서 라이브러리를 사용한 다른 개발자들의 경험을 활용할 수 있다.


쓸데없는데 시간을 허비하지 말자

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

• 자잘한 기능 개발이 아닌, 어플리케이션 핵심 기능 개발에 집중할 수 있다.


자동으로 개선되는 성능

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

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


기능 무한 증식

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


알아보기 쉬운 코드 작성 가능

• 작성한 코드가 많은 사람에게 낯익은 코드가 된다.

    ◦  읽기 쉽고, 유지보수하기 좋고, 재사용하기 쉬운 코드


그럼에도 많은 개발자들이 기능을 직접 구현하는 이유

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

• 메이저 릴리즈마다 주목할만한 수많은 기능이 라이브러리에 추가된다.

• 메이저 릴리즈마다 제공되는 릴리즈 노트에서 새로운 기능에 대한 설명을 참고하자.

 

JDK Release Notes

We’re sorry. We could not find a match for your search. We suggest you try the following to help find what you’re looking for: Check the spelling of your keyword search. Use synonyms for the keyword you typed, for example, try "application" instead of

www.oracle.com

 

표준 라이브러리 사용 예시

난수 생성 메소드

많은 개발자들이 메소드를 이렇게 작성하곤 한다.

• java.util.Random 을 이용하여 작성된 메소드 : 0 이상 n 미만의 수를 랜덤 반환한다.

•문제점

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

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

n 의 값이 크면 이 현상은 더 두드러진다.

   ◦  지정한 범위 바깥의 수가 종종 반환될 수 있다.

         -  rnd.nextInt( ) 의 반환값이 -2147483648 일 때

         -  자바의 int 타입은 32 bit 이므로 -2147483648 ~ 2147483647 의 값만 나타낼 수 있기 때문에
             rnd.nextInt() 이 -2147483648 를 반환하는 경우 절댓값 처리가 되지 않는다.

         -  Math.abs(-2147483648) = -2147483648

해결 방법

   ◦  java.util.Random 을 이용해 메소드를 작성하는 대신 Random.nextInt(int) 를 사용하면 된다.

         -  몇몇 숫자가 더 자주 반환되는 문제 해결

         -  범위 바깥의 수가 반환될 일도 없음

Java 7 부터는 성능이 훨씬 개선된 TreadLocalRandom 을 사용하는 것이 좋다.

Random.nextInt(int) vs TreadLocalRandom 성능 비교

포크-조인 풀이나 병렬 스트림에서는 SplittableRandom 을 사용하는 것이 좋다.


입력한 URL에서 내용을 가져오는 어플리케이션

자바 9에서 InputStream 에 추가된 transferTo 메서드를 사용하면 쉽게 구현할 수 있다.

Command Line 으로 입력 받기 까다로워 임시 String url 을 선언해 사용했다.

위 코드는 transferTo 를 이용해 이 기능을 완벽히 구현한 코드이다.

 

알아두면 좋은 라이브러리

java.lang

• Object 클래스

• String 클래스

• System 클래스

• Wrapper(래퍼) 클래스


java.util

• Arrays 클래스

• java.util.concurrent (동시성 라이브러리)

   ◦  멀티스레드 프로그래밍 작업을 단순화해주는 편의 기능 탑재

   ◦  자신만의 멀티스레딩 코드를 직접 구현할 수 있도록 도와주는 요소 탑재

   ◦  예) Semaphore 클래스, locks 패키지 등


java.io

• File 클래스

• BufferedReader / Writer 클래스

• Serializable 인터페이스


컬렉션 프레임워크

• List / Set / Map 클래스


스트림 라이브러리

• 기존 Java 에서 컬렉션 데이터를 처리할때는 for, for-each 루프문을 사용했음

   ◦  복잡한 처리 or 컬렉션의 크기가 커지면 성능 저하를 일으킴

• Stream : Java8에서 추가된 기능

   ◦  컬렉션 데이터를 선언형으로 쉽게 처리할 수 있음

   ◦  복잡한 루프문을 사용하지 않아도 되며, 루프문을 중첩해서 사용할 필요도 X

   ◦  병렬 처리를 별도의 멀티스레드 구현 없이 쉽게 사용 가능


Guava 라이브러리

• 구글이 작성한 자바 오픈 소스 라이브러리

•  Guava 사용 예시

Guava 를 이용해 리스트의 가장 마지막 원소 구하기

정리

어떤 기능이 필요할 때, 이미 구현된 라이브러리가 있는지 먼저 찾아보고 있으면 그걸 쓰자.

만약 찾아봤는데 없으면 구현해라. 즉, 무작정 구현부터 하진 말자. (그래야 너도 나도 좋다)