더북(TheBook)

자바 API는 java.util.function 패키지에 다수의 아주 범용적인 함수형 인터페이스를 정의하고 있다(2장과 3장에서 이러한 인터페이스를 자세히 살펴볼 것이다). 이러한 인터페이스 중 하나인 BiFunction<T, U, R>은 파라미터 타입이 TU고, 리턴 타입이 R인 함수를 나타낸다. 문자열 비교 람다를 BiFunction 타입 변수에 저장할 수 있다.


BiFunction<String, String, Integer> comp

= (first, second) -> Integer.compare(first.length(), second.length());


 

하지만 이 변수는 정렬에 도움이 되지 않는다. BiFunction을 요구하는 Arrays.sort 메서드는 없기 때문이다. 이전에 함수형 프로그래밍 언어를 사용한 경험이 있다면, 이 부분을 이상하다고 생각할 것이다. 하지만 자바 프로그래머에게는 아주 자연스러운 결과다. Comparator 같은 인터페이스는 단순히 주어진 파라미터와 리턴 타입이 있는 메서드에 그치지 않고 특정한 목적이 있다. 자바 8은 이러한 특징을 유지한다. 람다 표현식을 이용해 무언가 하고자 할 때, 여전히 해당 표현식의 목적을 염두에 두고 이를 위한 특정 함수형 인터페이스를 갖추게 된다.

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