람다식을 사용하기 위해 미리 인터페이스를 정의해놓은 java.util.function 패키지가 있음.
-> 람다식의 타입은 함수형 인터페이스
함수형 인터페이스는 단 하나의 추상 메서드만 가져야함
나름 종류별로 함수형 인터페이스가 있음.
중요한 인터페이스 :
Consumer, Function, Predicate, Supplier
Interface Consumer< T > 의 T타입은 input 파라미터의 타입임.
//자바가 컨슈머는 리턴타입이 없는걸 이미 알고 있어서, void면 알아서 인식
Consumer consumer = (x) -> System.out.println(x);
consumer.accept(3);
파라미터로 들어가는 x의 타입은?? Object, 즉 모른다.
Object를 쓰면 형변환 해야 하는 문제가 생긴다.
Counsuemr < T >로 제네릭으로 선언되어 있으니 타입을 선언해주는게 좋다.
-----------------------------------------------------------
Consuemr<Integer> = (x) -> System.out.println(x);
consumer.accept(3);
Interface Supplier< T > 의 T타입은 리턴의 타입임.
Supplier<String> supplier = () -> "made in korea";
String result = supplier.get();
Interface Function < T , R >의 T타입은 Input타입, R타입은 Output 타입
Function<String, List<String>> function = (string) -> {
return List.of(string);
};
String hello =function.apply("hello").get(0);
Interface Predicate< T >의 T타입은 Input타입이다.
Predicate<String> predicate = (string) -> "hello".equals(string);
predicate.test("hello");