함수형 인터페이스 혹은 람다 인터페이스 (Functional Interface, Lambda Interface) 란?
공식 API 문서
- 람다 인터페이스와 함수형 인터페이스는 같은 말이다.
- 단 하나의 추상 메서드만 가지는 인터페이스를 함수형 인터페이스라고 한다.
- 함수형 인터페이스를 구현하여 손쉽게 람다 표현식을 작성할 수 있다.
- Stream API 와 같이 사용하는 방식도 많이 이용된다.
- 자바에서는 자체적으로 많은 표준 함수형 인터페이스를 제공한다.
- 따로 만들기보단 제공하는 것을 이용하는 것이 좋다.
표준 함수형 인터페이스 살펴보기
Predicate<T>
- 임의의 타입
T 의 인자를 받아 boolean 을 반환하도록 설계되어 있다.
Predicate<Integer> isPositive = num -> num > 0;
Function<T, R>
T 타입의 인자를 받아 R 타입의 결과를 반환한다.
Function<String, Integer> strLength = str -> str.length();
Consumer<T>
T 타입의 인자를 받아 연산을 수행한다. 결과는 없다.
Consumer<String> printString = str -> System.out.println(str);
Supplier<T>
- 아무런 타입의 인자도 받지 않고,
T 타입의 결과를 반환한다.
Supplier<Double> randomNumber = () -> Math.random();
UnaryOperator<T>
T 타입의 인자를 받아 T 타입의 결과를 내보낸다.
UnaryOperator<Integer> square = num -> num * num;
BinaryOperator<T>
T 타입의 인자 2개를 받아 T 타입의 결과를 내보낸다
BinaryOperator<Integer> add = (num1, num2) -> num1 + num2;
프리미티브 (primitive) 타입을 이용할 때
- 프리미티브 타입을 이용하여 함수형 인터페이스를 이용하고 싶을 때 굳이 박싱처리를 할 필요는 없다.
- 앞에
Int 와 같이 사용하고 싶은 프리미티브 타입을 붙여보면, 프리미티브 타입을 위한 함수형 인터페이스를 찾을 수 있다.
IntPredicate isPositive = num -> num > 0;