더북(TheBook)

스트림(8장 스트림 참고)을 사용해 원하는 서비스를 찾는 방법도 있다. stream 메서드는 ServiceLoader.Provider 인스턴스의 스트림을 돌려준다. ServiceLoader.Provider 인터페이스에는 각 프로바이더를 기술하는 클래스와 프로바이더 인스턴스를 얻는 type, get 메서드가 있다. 타입에 따라 프로바이더를 선택한다면 그냥 type을 호출하면 되는데, 이때 서비스 인스턴스가 불필요하게 생성되지 않는다. 이 예제에서는 스트림을 필터링해서 필요한 강도를 가진 암호(Cipher)를 걸러 올 것이므로 프로바이더 인스턴스를 얻어야 한다.

public static Optional<Cipher> getCipher2(int minStrength) {

    return cipherLoader.stream()

        .map(ServiceLoader.Provider::get)

        .filter(c -> c.strength() >= minStrength)

        .findFirst();

}


어떤 구현체든 상관없다면 그냥 findFirst를 호출한다.

Optional<Cipher> cipher = cipherLoader.findFirst();


Optional 클래스는 8장 스트림에서 자세히 설명한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.