프로그래밍/Java
[Java8] 매개변수 3개 이상인 함수형 인터페이스 만드는 법
vince joe
2022. 1. 8. 16:43
jdk8부터 람다를 사용할 수 있습니다.
java.util.function 패키지에 여러 함수형 인터페이스들이 정의되어 있는데, 매개변수가 2개인 BiFunction, BiPredicate, BiConsumer 등 까지만 정의되어 있습니다.
@FunctionalInterface
interface TriFunction<T, U, V, R> {
R apply(T t, U u, V v);
}
@FunctionalInterface
interface TriPredicate<T, U, V> {
boolean test(T t, U u, V v);
}
@FunctionalInterface
interface TriConsumer<T, U, V> {
void accept(T t, U u, V v);
}
매개변수가 3개 이상인 함수형 인터페이스는 직접 만들면 됩니다. @FunctionalInterface 어노테이션 붙이는 걸 잊지 마세요.
가장 기본적인 함수형 인터페이스의 리턴타입과 동작 방식은 아래와 같습니다 (R은 리턴 타입입니다)
- Supplier<T>: T get()
매개변수 없고 반환값만 있음 - Consumer<T>: void accept(T t)
매개변수 있고 반환값 없음 - Function<T, R>: R apply(T t)
매개변수, 반환값 있음 - Predicate<T>: boolean test(T t)
매개변수 있고 반환값은 boolean
Function<Double, Function<Integer, Consumer<String>>> f = d -> i -> s -> {
System.out.println("" + d+ ";" + i+ ";" + s);
};
f.apply(1.0).apply(2).accept("s");
커링(currying)으로도 가능하다...라곤 하지만 그냥 함수형 인터페이스 쓰는게 여러모로 나아 보입니다.
반응형