함수형 인터페이스

김민창·2023년 9월 17일
0
post-thumbnail
  • Java8 부터 함수형 인터페이스 등장
  • java.util.function 에서 확인 가능
  • 커스텀하게 작성 가능하며 interface 내부에 하나의 메서드만 선언하여 사용 가능

FunctionalInterface 어노테이션 ?

  • java.util.function에 선언되어 있는 함수형 인터페이스에는 하나같이 @FunctionalInterface 어노테이션이 붙어있는것을 확인할 수 있다

  • 함수형 인터페이스로 사용하기 위해서는 단일 메서드를 가져야하는데, 선언을 안하거나, 두개이상의 메서드를 선언할때 컴파일시 에러를 반환해준다

  • 선언은 다음처럼 되어있다.

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
  • 하나도 선언 안되어 있을때
  • 두개이상 선언되어 있을때

그래서 자바에서 기본제공하는 함수형 인터페이스는 뭐가 있나 ?

  • Function<T, R>
  • Supplier<T>
  • Consumer<T>
  • Predicate<T>

하여간 많으니 몇개만 본다면


Function

  • 말그대로 함수라고 생각하면 된다.
  • 첫번째 제네릭타입에 input으로 들어가면, 두번째 제네릭타입으로 output이 된다.
@FunctionalInterface
public interface Function<T, R> {

    R apply(T t);
}

Supplier

  • Function 과 다르게 input이 없다. output만 존재한다.
  • 제네릭으로 선언되어있는 타입으로 반환된다.
@FunctionalInterface
public interface Supplier<T> {

    T get();
}

Consumer

  • Supplier와 반대라고 생각하면 된다. input은 있지만 output은 없다.
  • 소비를 해버린다는 뜻과 같이 예를들어 System.out.print() 같은게 있을수 있겠다.
@FunctionalInterface
public interface Consumer<T> {

    void accept(T t);
}

Predicate

  • 인자값을 받아서 boolean을 반환한다.
  • 예로 stream() 에서 사용하는 filter() 에서 Predicate를 사용한다
@FunctionalInterface
public interface Predicate<T> {

    boolean test(T t);

profile
개발자 팡이

0개의 댓글