- 람다가 지원되면서 상위 클래스의 기본메서드를 재정의해 원하는 동작을 구현하는 템플릿 메서드 보다
- 이를 대체하는 해법은 같은효과의 함수 객체를 받는 정적 팩터리나 생성자를 제공
- 필요한 용도에 맞는게 있다면, 직접 구현하지 말고 표준함수형 인터페이스를 활용하자.
|종류|추상메서드 특징| |:-:|:-:| |Consumer|- 매개값은 있고, 리턴값은 없음| |Supplier|- 매개값은 없고, 리턴값은 있음| |Function|- 매개값도 있고, 리턴값도 있음
- 주로 매개값을 리턴값으로 매핑(
타입변환)| |Operator|- 매개값도 있고, 리턴값도 있음
- 주로 매개값을 연산하고 결과를 리턴| |Predicate|- 매개값은 있고, 리턴 타입은 boolean
- 매개값을 조사해서 true/false 리턴|
- 위 6가지 함수형 인터페이스의 자세한 타입들은 너무 많아 아래 출처로 대체하겠다.
- ex) Comparator
- 자주 쓰이며, 이름 자체가 용도를 명확히 설명해준다.
- 반드시 따라야할 규약이 있다.
- 유용한 디폴트 메서드를 제공할 수 있다.
- 계산량이 많을때 성능이 처참하게 느려질 수 있다.
- ex) 매개변수 3개받는 Predicate 등등..
@FunctionalInterface
public interface MyFunctionalInterface {
public int method(int x, int y);
}
- 해당 클래스의 코드나 설명 문서를 읽을 이에게 그 인터페이스가 람다용으로 설게된 것임을 알려준다.
- 해당 인터페이스가 추상 메서드를 오직 하나만 가지고 있어야 컴파일되게 한다.
- 그 결과 유지 보수과정에서 실수로 메서드를 추가하지 못하게 막아준다.
- 클라이언트에게 모호함을 주고 문제가 생길 수 있음