Kim-Baek 개발자 이야기

[Java] 함수형 인터페이스 (@FunctionalInterface) 본문

개발

[Java] 함수형 인터페이스 (@FunctionalInterface)

데이터 개발자 2020. 8. 15. 03:00

 

빈번하게 사용되는 함수적 인터페이스(Functional Interface)는 java.util.function 표준 API 패키지로 제공한다.

 

java.util.function 패키지의 함수적 인터페이스는 크게 Consumer, Supplier, Function, Operator, Predicate로 구분된다.

 > 필요한 용도에 맞는 게 있다면, 직접 구현하지 말고 표준 함수형 인터페이스를 활용하라

 

java.util.function 패키지에는 총 43개의 인터페이스가 있지만, 6개만 알면 나머지는 유추 가능

 

 

1. UnaryOperator -> 인수가 1개 

 

String::toLowerCase

 

2. BinaryOperator -> 인수가 2개

 

BigInteger::add

 

3. Predicate -> 인수 1개를 받아 boolean 반환

 

Collectiong:isEmpty

 

4. Function -> 인수와 반환 타입이 다름

 

Arrays::asList

 

5. Supplier -> 인수를 받지 않고 반환 값 있음

 

Instant::now

 

6. Consumer -> 인수를 1개 받고 반환 값 없음

 

System.out::println

 

 

Example

 

 @FunctionalInterface
  public interface Consumer<T> {
    void accept(T t);
  }

  private static void example() {
    final Consumer<String> greetings = value -> System.out.println("Hello " + value);
    greetings.accept("World");  // Hello World
  }

 

기본 인터페이스는 기본 타입이 int, long, double 3개이다

 - IntPredicate : int 를 받는 Predicate

 - LongBinaryOperator : long을 받아 long을 반환함

 - LongFunction<int[]> : long을 받아 int[] 반환

 - LongtoIntFunction : long을 받아 int 반환

 - ToLongFunction<int[]> : int[]를 받아 long을 반환 ....

 

기본 함수형 인터페이스에 박싱된 기본 타입을 넣어 사용하지는 말자 => 성능 저하

 

표준 함수형 인터페이스를 사용할 수 없을때, 직접 작성하자

 

직접 만든 함수형 인터페이스에는 항상 @FunctionalInterface 애너테이션을 사용하라

 

// 컴파일 OK
public interface FunctionalInterfaceExample {
    
}

// 추상 메소드가 없으므로 컴파일 에러
@FunctionalInterface
public interface FunctionalInterfaceExample {
    
}

// 추상 메소드가 두 개 이상이면 컴파일 에러
@FunctionalInterface
public interface FunctionalInterfaceExample {
  void apply();
  void illigal(); // error
}
반응형
Comments