Java 함수형 인터페이스란?
- 함수형 인터페이스란 1개의 추상 메소드를 갖는 인터페이스를 말합니다.
- SAM(Single Abstract Method)인터페이스
@FunctionalInterface
어노테이션을 가지고 있는 인터페이스
위의 클래스는 static
default
메소드가 있지만 추상 메소드는 하나 이기 때문에 함수형 인터페이스 이다.
@FunctionalInterface
어노테이션을 설정해두면 좀더 명시적으로 함수형 인터페이스를 설정 가능하고 추상메서드를 하나 더 추가했을때 @FunctionalInterface
경고를 발생시켜준다.
사용 방법
java8 이후부터는 람다표현식(Lambda Expressions)를 이용하여 간략하게 구현가능하다.
1
2
3
4
5
6
7
public class Foo {
public static void main(String[] args) {
RunSomething runSomething = () -> System.out.println("Hello");
}
}
자바에서 제공하는 함수형 인터페이스 java.util.function
name | Descripter | Method |
---|---|---|
Function<T,R> | T → R | R apply(T t) |
Predicate | T → boolean | boolean test(T t) |
Consumer | T → void | void accept(T t) |
Function<T,R>
T 타입을 받아서 R 타입을 반환한다.
- apply
- andThen
- compose andThen vs compose → 실행순서의 차이가 있다.
Predicate
T 타입을 받아서 boolean 을 반환한다.
- and : Predicate를 연결해서 사용가능하다.
- negate : test 의 반대 결과 반환한다.
- or : 두개의 Predicate 결과를 or 연산
- isEqual : 두개의 Predicate 결과가 동일한지 체크
- not
Consumer
T 타입을 받아서 void를 반환한다.
- accept
Conclusion
코드 리뷰 하면서 잘못 알고 있었던 함수형 인터페이스
에대해서 다시한번 알아보면서 간단하게 정리해 보았다. 간략하게 정리해서 내용이 약간 빈약한 부분이 있지만 계속해서 추가해 나가겠다.
참조
- https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
- https://developer-talk.tistory.com/460
- https://bcp0109.tistory.com/313