정리

자바가 람다를 지원하면서 상위클래스의 기본 메서드를 재정의해 원하는 동작을 구현하는 템플릿 메서드 패턴의 매력이 크게 줄었다. 함수 객체를 매개변수로 받는 생성자와 메서드를 더만이 만들어야 한다. 필요한 용도에 맞는게 있다면 직접 구현하지말고 표준 함수형 인터페이스를 활용하라. 표준 함수형 인터페이스 대부분은 기본 타입만 지원한다. 그렇다고 기본 함수형 인터페이스에 박싱된 기본타입을 넣어 사용하지는 말자.

@FunctionalInterface 애너테이션의 세가지 목적

  • 해당 클래스의 코드나 설명 문서를 읽은 이에게 그 인터페이스가 람다용으로 설계된 것임을 알려준다.
  • 해당 인터페이스가 추상메서드를 오직하나만 가지고 있어야 컴파일하게 해준다.
  • 그 결과 유지보수 과정에서 누군가 실수로 메서드를 추가하지 못하게 막아준다. 따라서 직접 만든 함수형 인터페이스에는 항상 @FunctionalInterface 애너테이션을 사용하라.

핵심정리

이제 자바도 람다를 지원한다. 여로분도 지금부터는 API를 설계할 때 람다도 염두헤 두어야 한다.는 뜻이다. 입력값과 반환값에 함수형 인터페이스 타입을 활용하라. 보통은 java.util.function 패키지의 표준 함수형 인터페이스를 사용하는 것이 가장 좋은 선택이다. 단, 흔치는 않지만 직접 새로운 함수형 인터페이스를 만들어 쓰는 편이 않으수도 있음을 잊지 말자.