woowacourse-study/2022-modern-java-in-action

자바 8에 추가된 함수형 인터페이스에 대해 알아보자

Opened this issue · 1 comments

문제

책에서는 Predicate, Consumer, Function 함수형 인터페이스에 대해서만 설명해주었다. 그 외에 자바 8에 추가된 함수형 인터페이스에 대해 짚고 넘어가자.

선정 배경

최근 미션에서 BiPredicate 를 사용한 예시를 몇번 보았는데, 코드가 훨씬 간결해지고 가독성이 높아지는 것을 볼 수 있었다. 직접 함수형 인터페이스를 구현해서 잘 사용하는 것도 중요하지만, 자바에서 만든 검증된 표준 함수형 인터페이스를 잘 활용할 줄 아는 것도 중요하다고 생각한다.

관련 챕터

  • [3장] 람다 표현식
    • p.105

Supplier

  • 인자를 받지 않고 Type T 객체를 리턴하는 함수형 인터페이스
Supplier<Item> supplier= ()-> new Item(10, "Hello");
Item result = supplier.get();

UnaryOperator

  • Type T의 인자 하나를 받고, 동일한 Type T 객체를 리턴하는 함수형 인터페이스
UnaryOperator<Integer> unaryOperator1 = n -> n * n;
Integer result = unaryOperator1.apply(10);

UnaryOperator<Integer> func1 = n -> n * 2;
UnaryOperator<Integer> func2 = n -> n * 3;
Integer result = func1.andThen(func2).apply(10);

BinaryOperator

  • Type T의 인자 두개를 받고, 동일한 Type T 객체를 리턴하는 함수형 인터페이스
BinaryOperator<Integer> binaryOperator = (n1, n2) -> n1 + n2;
Integer sum = binaryOperator.apply(10, 100);

BiPredicate

  • 2개의 인자를 받고 boolean을 리턴하는 함수형 인터페이스이다.
BiPredicate<Integer, Integer> biPredicate = (n1, n2) -> n1 > n2;
boolean result = biPredicate.test(10, 100);

BiConsumer

  • 2개의 인자를 받고 리턴 값이 없는 함수형 인터페이스
BiConsumer<Integer, Integer> biConsumer = (n1, n2) -> System.out.println(n1 * n2);
biConsumer.accept(10, 20);

BiFunction

  • 2개의 인자(Type T, U)를 받고 1개의 객체(Type R)를 리턴하는 함수형 인터페이스
BiFunction<String, String, String> func1 = (s1, s2) -> {
   String s3 = s1 + s2;
   return s3;
};
String result = func1.apply("Hello", "World");