더북(TheBook)

자바 컬렉션 라이브러리가 이와 같은 방식으로 리팩토링될 것 같지는 않지만, 자신만의 인터페이스를 구현한다면 더는 유틸리티 메서드용으로 별도의 동반 클래스를 제공할 이유가 없다.

자바 8에서는 상당히 많은 인터페이스에 정적 메서드를 추가했다. 예를 들어, Comparator 인터페이스는 ‘키 추출’ 함수를 받아서 추출된 키들을 비교하는 비교자를 돌려주는 아주 유용한 정적 comparing 메서드를 제공한다. Person 객체를 이름으로 비교하려면 Comparator.comparing(Person::name)을 사용하면 된다.

이 장에서는 람다 표현식 (first, second) -> Integer.compare(first.length(), second.length())를 이용해서 문자열을 길이로 비교했다. 하지만 정적 comparing 메서드를 이용하면 훨씬 훌륭하게 수행할 수 있고, 간단하게 Comparator.comparing(String::length)를 사용하면 된다. 이 예는 함수를 이용한 작업의 힘을 보여주기 때문에 이 장을 마무리하기에 적합한 방법이다. comparing 메서드는 함수(키 추출기)를 더 복잡한 함수(키 기반 비교자)로 변환한다. 3장에서 이와 같은 ‘고차 함수higher order function’를 자세히 살펴볼 것이다.

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