1)순서

인터페이스 --> 익명클래스 --> 람다(lambda) --> 표준 API 함수적 인터페이스 --> 자바스트림 API (컬렉션 기반)

2)람다(lambda) 표현식

  • 자바는 최소단위가 클래스이다.
  • 메서드능(기능) 하나만 필요해도 무조건 클래스를 만들어야 된다. 매우 비효율적이다.
    기능에만 집중해서 충실하게 프로그래밍 하자
    ==> 함수형 프로그래밍(functional programming )
  • 역할:
    익명클래스의 추상 메서드를 표현하기 위한 식이다.
  • 특징:
    반드시 추상 메서드는 하나만 존재해야 된다. 두 개 이상인 경우에는 람다(lambda) 표현식 사용불가.
    @FunctionalInterface 어노테이션을 이용하여 두 개 이상의 추상 메서드가 선언되지 못하도록 강제한다.
    ( default 메서드 및 static 메서드는 여러개 지정해도 상관없다. )
  • 메서드 기능에 따라서 람다 표현식이 달라진다.
    4가지 기능에 해당하는 람다 표현식이 있다.





  • 가. 파라미터 없고 리턴값 없는 경우
    나. 파라미터 있고 리턴값 없는 경우
    다. 파라미터 없고 리턴값 있는 경우
    라. 파라미터 있고 리턴값 있는 경우

3) 표준 API 함수적 인터페이스

 

개념

  • 람다 표현식을 이용해서 처리하는 기능(4가지 기능)을 자바 API로 제공함.
  • java.util.function 패키지로 제공됨.
  • @FunctionalInterface 어노테이션으로 지정되어 있음. ( 추상메서드는 단 하나만 존재 )

가. Consumer 인터페이스

  • 파라미터 있고 리턴값 없음
  • accept(T) 메서드 처리
< 파라미터가 한 개인 경우 >

*DoubleConsumer 인터페이스
   -파라미터 있고 리턴값 없음

*IntConsumer 인터페이스
   -파라미터 있고 리턴값 없음
     -accept(int) 메서드 처리

*LongConsumer 인터페이스
   -파라미터 있고 리턴값 없음
     -accept(long) 메서드 처리
< 파라미터가 두 개인 경우>

 * BiConsumer<T,U>
   -파라미터 있고 리턴값 없음
   -accept(T t, U u)

 * ObjDoubleConsumer<T>
   -파라미터 있고 리턴값 없음
   -accept(T t, double)

 * ObjIntConsumer<T>
   -파라미터 있고 리턴값 없음
   -accept(T t, int)

* ObjLongConsumer<T>
   -파라미터 있고 리턴값 없음
   -accept(T t, long)



나. Supplier 인터페이스

  • 파라미터 없고 리턴값 있음
  • T get() 메서드 이용
   * BooleanSupplier 인터페이스
    -파라미터 없고 리턴값 있음
    -boolean getAsBoolean()

   * DoubleSupplier 인터페이스
    -파라미터 없고 리턴값 있음
    -boolean getAsDouble()

    * IntSupplier 인터페이스
    -파라미터 없고 리턴값 있음
    -boolean getAsInt()

   * LongSupplier 인터페이스
    -파라미터 없고 리턴값 있음
    -boolean getAsLong()



다. Function<T,R> 인터페이스 ★

  • 파라미터 있고 리턴값 있음
  • R apply(T t)
< 메서드 파라미터 갯수가 한 개 인 경우 >

  * DoubleFunction<R>
    -파라미터 있고 리턴값 있음
    -R apply(double value)

  * IntFunction<R>
      -파라미터 있고 리턴값 있음
      -R apply(int value)

  * DoubleToIntFunction
      -파라미터 있고 리턴값 있음
      -int applyAsInt(double value)

  * DoubleToLongFunction
      -파라미터 있고 리턴값 있음
      -long applyAsLong(double value)

  * IntToDoubleFunction
      -파라미터 있고 리턴값 있음
      -double applyAsDouble(int value)

  * IntToLongFunction
      -파라미터 있고 리턴값 있음
      -long    applyAsLong(int value)

  * LongToIntFunction
      -파라미터 있고 리턴값 있음
      -int    applyAsInt(long value)

  * LongToDoubleFunction
      -파라미터 있고 리턴값 있음
      -double applyAsDouble(long value)

  * ToIntFunction<T>
      -파라미터 있고 리턴값 있음
      -int    applyAsInt(T value)

    * ToDoubleFunction<T>
      -파라미터 있고 리턴값 있음
      -double applyAsDouble(T value)
 < 메서드 파라미터 갯수가 두 개 인 경우 >

    * BiFunction<T,U,R>
     -파라미터 있고 리턴값 있음
     -R    apply(T t, U u)

    * ToIntBiFunction<T,U>
     -파라미터 있고 리턴값 있음
     - int applyAsInt(T t, U u)

     * ToDoubleBiFunction<T,U,R>
     -파라미터 있고 리턴값 있음
     -double applyAsDouble(T t, U u)



라. Operator 인터페이스

  • 파라미터 있고 리턴값 있음
< 파라미터 갯수가 한 개인 경우 >

 * UnaryOperator<T> ==> 파라미터 타입은 T, 리턴타입은 T이다
       - 파라미터 있고 리턴값 있음
       - T apply(T t)

       - 부모는 Function<T,R> 이다. ==> Function은 파라미터 타입은 T, 리턴타입은 R이다.
             => R apply(T t)

 * DoubleUnaryOperator ==> 파라미터 타입은 double, 리턴타입은 double이다
       - 파라미터 있고 리턴값 있음
       - double applyAsDouble(double operand)

 * IntUnaryOperator ==> 파라미터 타입은 int, 리턴타입은 int이다
       - 파라미터 있고 리턴값 있음
       - int applyAsInt(int operand)
< 파라미터 갯수가 두 개인 경우 >

* BinaryOperator<T>
   - 파라미터 있고 리턴값 있음
   - T apply(T t, T t2) ==> 파라미터 타입은 T 하고 T, 리턴타입도 T이다
   - 부모는 BiFunction<T,U, R> ==> BiFunction은 파라미터 타입은 T하고 U, 리턴타입은 R이다.

* IntBinaryOperator
   - 파라미터 있고 리턴값 있음
   - int applyAsInt(int left, int right)



마. Predicate 인터페이스 ★

  • 파라미터 있고 리턴값 있음.
  • 무조건 리턴값은 boolean 이다.
  < 파라미터 갯수가 한 개인 경우 >

 * Predicate<T>
  - 파라미터 있고 리턴값 있음
  - 무조건 리턴값은 boolean 이다.
  - boolean test(T t)

 * IntPredicate
  - 파라미터 있고 리턴값 있음
  - 무조건 리턴값은 boolean 이다.
  - boolean    test(int value)

 * DoublePredicate
  - 파라미터 있고 리턴값 있음
  - 무조건 리턴값은 boolean 이다.
  - boolean    test(double value)
 < 파라미터 갯수가 두 개인 경우 >

   * BiPredicate<T,U>
      - 파라미터 있고 리턴값 있음
        - 무조건 리턴값은 boolean 이다.
        - boolean    test(T t, U u)
xoo | 수진