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