람다가 지원되면서 상위 클래스의 기본 메서드를 재정의해 원하는 동작을 구현하는 템플릿 메서드 패턴의 매력이 줄었다. 현대적인 방법은 같은 효과의 함수 객체를 받는 정적 팩터리나 생성자를 제공하는 것이다. 즉 함수 객체를 매개변수로 받는 것이다.
java.util.function
패키지를 보면 다양한 용도의 표준 함수형 인터페이스가 담겨 있다. 필요한 용도에 맞는게 있다면, 직접 구현하지 말고 표준 함수형 인터페이스를 활용하라.
UnaryOperator
와, 2개인 BinaryOperator
. 반환값과 인수의 타입이 같다. 표준 함수형 인터페이스 대부분은 기본 타입만 지원한다. 기본 함수형 인터페이스에 박싱된 기본 타입을 넣어 사용하지는 말자. 성능이 느려질 수 있다.
하지만 구조적으로 표준 함수형 인터페이스가 존재해도 직접 작성해야할 때가 있다.
Comparator<T>
를 생각해보면 구조적으로 ToIntBiFunction<T, U>
와 동일하다.
하지만 Comparator는
이 중 하나 이상을 만족하면 전용 함수형 인터페이스 구현을 고려하자.
전용 함수형 인터페이스에는 항상 @FunctionalInterface
애너테이션을 사용하자.