함수형 인터페이스 혹은 람다 인터페이스 (Functional Interface, Lambda Interface) 란?
- 람다 인터페이스와 함수형 인터페이스는 같은 말이다.
- 단 하나의 추상 메서드만 가지는 인터페이스를 함수형 인터페이스라고 한다.
- 함수형 인터페이스를 구현하여 손쉽게 람다 표현식을 작성할 수 있다.
- 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;
반응형
'Java > 자바 잡지식' 카테고리의 다른 글
자바의 ThreadLocal 이란? (0) | 2023.06.23 |
---|---|
자바 Stream 에 size() 혹은 length 프로퍼티가 없는 이유 (0) | 2023.03.31 |
Java Stream API 에서 평가 (evaluation) 란? (0) | 2023.03.28 |
자바에서 상속이 갖는 단점들 (0) | 2023.02.22 |
로컬과 운영 환경의 log4j 나누기 (0) | 2022.12.28 |