티스토리 뷰
Q. Enum 강의 내용 중, BiFunction을 통해 연산을 수행하도록 해주었는데,
자바에서 제공하는 함수형 인터페이스의 종류에는 어떤 것들이 있고 어떻게 사용하는걸까?
자바 8버전부터
빈번하게 사용되는 함수형 인터페이스를 java.util.function 표준 API 패키지로 제공하고 있으며,
제공되는 함수형 인터페이스는 크게 5가지로 Consumer, Supplier, Function, Operator, Predicate가 있습니다!
Function
매개값⭕ 리턴값도 있다⭕
주로 매개값을 반환값으로 매핑할 때 즉, 타입 변환이 목적일 때 사용한다.
BiFunction<T, U, R>
두 개의 입력 값(T, U)를 받아서 R 타입을 리턴하는 함수형 인터페이스
추상 메소드: R apply(T t, U u)
import java.util.function.BiFunction;
public class BiFunctionExample {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> addFunction = (a, b) -> a + b;
int result = addFunction.apply(5, 3);
System.out.println("결과: " + result);
}
}
이외에도
Function<T, R>
객체 T를 객체 R로 매핑한다.
DoubleFunction
double 값을 객체 R로 매핑한다.
IntFunction
int 값을 객체 R로 매핑한다.
IntToDoubleFunction
int 값을 double 값으로 매핑한다.
InToLongFunction
int 값을 long 값으로 매핑한다.
ToDoubleBiFunction<T, U>
객체 T와 U를 double 값으로 매핑한다.
ToIntFunction
객체 T를 int 값으로 매핑한다.
➡️ 함수명에서 어떤 식으로 동작하는지 대충 파악가능한 것 같습니다ㅏ!
두개의 매개변수를 받는 인터페이스면 Bi
정수 타입을 매개변수로 받으면 Int
실수 타입을 반환하면 AsDouble
➡️이런 느낌이네요!
스트림에서 사용되는 예시)
List<String> mapping = Stream.of("hihi", "byebye")
.map(word -> word + "^^")
.collect(Collectors.toList());
// hihi^^, byebye^^
Map은 단일 매개변수를 사용하고 해당 값에 대해 작업을 수행하여 새 값을 반환할 수 있도록 하는 Function을 사용하고 있습니다👻
이외의 것들도 간단하게만 보면
Consumer
매개변수는 ⭕ 반환값은 ❌ -> 소비한다.
Stream의 forEach 메소드의 매개변수 타입이 Consumer이다.
Supplier
매개값은 ❌ 반환값은 ⭕ -> 공급한다.
Stream의 generate는 매개변수로 Supplier 타입을 받아 get 메소드의 반환값으로 무한한 Stream을 생성한다.
Operator
매개값도 ⭕ 반환값도 ⭕
주로 매개값을 연산하여 결과를 반환할 때 사용된다.
Stream의 reduce 메소드 중 하나는 매개변수로 BinaryOperator를 전달받아 컬렉션의 모든 수를 더한다.
Function와 Operator는 매개값과 반환값이 둘 다 존재하는데 무슨 차이가 있을까❓
- Function은 타입 변환 목적, Operator는 연산 목적으로 사용됩니다! Operator는 연산 시에 사용되는 만큼, 매개값과 반환값의 타입이 동일하다는 특징이 있습니다!
Predicate
매개값은 ❌ 반환 타입은 ⭕ boolean
매개값을 받아 검사하고 true 혹은 false를 반환할 때 사용된다.
Stream의 allMatch 메소드는 매개변수로 Predicate 타입을 전달받아, 컬렉션의 모든 요소가 주어진 조건에 모두 일치하면 true를 반환한다.
'백엔드 > Java' 카테고리의 다른 글
[자바와 객체지향] 객체지향 문법 정리 (0) | 2023.09.21 |
---|---|
[자바와 객체지향] 객체지향적인 코드 작성 (0) | 2023.09.21 |