ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바에서 제공하는 함수형 인터페이스
    프로그래밍/Java 2022. 6. 7. 23:12

    함수형 인터페이스를 따로 정의하지 않고도 자바에서 기본으로 제공하는 함수형 인터페이스가 있다.

    이를통해 람다 표현식, 메서드 레퍼런스, 생성자 레퍼런스를 사용해서 구현할 수 있는 함수형 인터페이스를 살펴보자.

     

     

     

    자바에서 미리 정의해둔 자주 사용할만한 함수 인터페이스


    Function<T, R>

    T타입을받아서R타입을리턴하는함수인터페이스

    import java.util.function.Function;
    
    class Plus10 implements Function<Integer, Integer> {
      @Override
      public Integer apply(Integer integer) {
        return integer + 10;
      }
    }
    
    public class Foo {
    
      public static void main(String[] args) {
    
        // 방법 1
        Plus10 plus10 = new Plus10();
        System.out.println(plus10.apply(1));
    
        // 방법 2, 람다 표현식을 사용하여 클래스 필요 없이 바로 구현 가능
        Function<Integer, Integer> plus20 = (i) -> i + 20;
        System.out.println(plus20.apply(1));
    
        // 함수를 조합할 수 있는 메서드를 default 메서드로 제공한다.
        // compose? x2 먼저 실행 후 +10 실행
        Function<Integer, Integer> multiply2 = (i) -> i * 2;
        Function<Integer, Integer> multiply2AndPlus10 = plus10.compose(multiply2);
        System.out.println(multiply2AndPlus10.apply(2));
    
    	// andThen? +10 실행 후 x2 실행
        Function<Integer, Integer> Plus10Andmultiply2 = plus10.andThen(multiply2); 
        System.out.println(Plus10Andmultiply2.apply(2));
      }
    }

     

    BiFunction<T, U, R>

    두개의값(T,U)를받아서R타입을리턴하는함수인터페이스

     

    Consumer<T>

    T 타입을 받아서 아무값도 리턴하지 않는 함수 인터페이스

    import java.util.function.Consumer;
    
    public class Foo {
    
      public static void main(String[] args) {
        // 타입을 받아서 아무값도 리턴하지 않는 함수 인터페이스
        Consumer<Integer> printT = i -> System.out.println(i);
        printT.accept(10);
      }
    }

     

    Supplier<T>

    T 타입의 값을 제공하는 함수 인터페이스

    import java.util.function.Supplier;
    
    public class Foo {
      public static void main(String[] args) {
        // 타입의 값을 제공하는 함수 인터페이스, 아무 값도 파라미터로 받지 않고 주기만 한다.
        Supplier<Integer> get10 = () -> 10;
        System.out.println(get10.get());
      }
    }

     

    Predicate<T>

    T 타입을 받아서 boolean을 리턴하는 함수 인터페이스

    import java.util.function.Predicate;
    
    public class Foo {
      public static void main(String[] args) {
        // 인자를 받아서 boolean을 리턴하는 함수 인터페이스
        Predicate<String> startWithHK = (s) -> s.startsWith("s");
      }
    }

     

    UnaryOperator<T>

    Function<T, R>의 특수한 형태로, 입력값 하나를 받아서 동일한 타입을 리턴하는 함수 인터페이스

    import java.util.function.UnaryOperator;
    
    public class Foo {
      public static void main(String[] args) {
        // 입력 타입과 리턴 타입이 같으면 UnaryOperator 를 사용할 수 있다.
        // Function<Integer, Integer> 할 필요가 없다.
        UnaryOperator<Integer> plus30 = (i) -> i + 20;
      }
    }

     

    BinaryOperator<T>

    BiFunction<T, U, R>의 특수한 형태로, 동일한 타입의 입렵값 두개를 받아 리턴하는 함수 인터페이스

    import java.util.function.BinaryOperator;
    
    public class Foo {
      public static void main(String[] args) {
        // BiFunction 에 특수한 형태로, 세개의 타입이 모두 같은경우 쓰일수 있다는 것이다.
        BinaryOperator<Integer> test = (a,b) -> a + b + 20;
      }
    }

     

    이 처럼 Java 가 제공해주는 함수형 인터페이스를 이용하여 새로운 함수형 인터페이스를 사용하지 않고도 작업이 가능하다.

    위 항목 외에도 많은 함수형 인터페이스를 제공하니 필요할 때 마다 찾아쓰면 된다.

     

     

    참고


    자바가 제공해주는 함수형 인터페이스

    https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

     

    백기선 - 더 자바, Java8
    https://www.inflearn.com/course/the-java-java8/dashboard

     

    '프로그래밍 > Java' 카테고리의 다른 글

    인터페이스 default 메소드와 static 메소드  (0) 2022.06.09
    메소드 레퍼런스  (0) 2022.06.08
    함수형 인터페이스와 람다 표현식 소개  (0) 2022.06.07
    Metaspace  (0) 2022.05.06
    배열 Parallel 정렬  (0) 2022.05.06
Designed by Tistory.