Java/Spring
자바 8 표준 API의 함수형 인터페이스(Supplier, Consumer)
BBB.OOO
2025. 1. 7. 15:43
반응형
Java 8 표준 API 의 함수형 인터페이스(Supplier, Consumer)
함수형 인터페이스란 1개의 추상 메소드를 갖는 인터페이스를 말한다.
Java8 부턴 default 라는 키워드가 생겨 구현되어 있는 메서드가 있으나
여러개의 디폴트 메서드가 있더라도 추상 메서드가 오직 한개라면 함수형 인터페이스이다.
자바의 람다 표현식은 함수형 인터페이스로만 사용 가능하다.
만들어진 이유
자주 사용할 것 같은 람다 함수 형태를 함수형 인터페이스 표준 API 로 미리 만들어
제공해주기 위해서 만들어졌다.
@FunctionalInterface
함수형 인터페이스는 @FunctionalInterface 라는 어노테이션을 사용한다.
이 어노테이션은 해당 인터페이스가 함수형 인터페이스 조건에 맞는지 검사해준다.
해당 어노테이션은 없어도 함수형 인터페이스로 동작하고 사용하는데 문제없지만
인터페이스 검증과 유지보수를 위해 붙여주는게 좋다.
대표적인 예로는 Supplier 와 Consumer 가 존재한다.
사용방법
아래는 @FunctionalInterface 를 사용하여 함수형 인터페이스를 만들었다.
@FunctionalInterface
public interface CustomFunction<T> {
T myFnc();
default void printDefaultFnc() {
System.out.println("Default 메서드입니다.");
}
static void printStaticFnc() {
System.out.println("Static 메서드입니다.");
}
}
람다식으로 함수형 인터페이스의 <T>(제네릭) 에 String 으로 넣어 값을 설정했다.
CustomFunction<String> customFunction = () -> "Obo String";
String myString = customFunction.myFnc();
System.out.println("myString : "+myString);
customFunction.printDefaultFnc();
CustomFunction.printStaticFnc();
// 결과
myString : Obo String
Default 메서드입니다.
Static 메서드입니다.
Java 에서 기본적으로 제공하는 함수형 인터페이스
Predicate | T -> boolean | boolean test(T t) |
Consumer | T -> void | void accept(T t) |
Supplier | () -> T | T get() |
Function<T, R> | T -> R | R apply(T t) |
Comparator | (T, T) -> int | int compare(T o1, T o2) |
Runnable | () -> void | void run() |
Callable | () -> T | V call() |
Consumer<T>
Consumer 는 인자 하나를 받고 아무것도 리턴하지 않는다.
소비자 라는 이름에 걸맞게 인자를 받아서 처리하고 끝난다.
람다식으로는 T -> void 로 표현한다.
Supplier<T>
Supplier 는 아무런 파라미터를 받지 않고 <T> 제네릭 타입 객체를 리턴한다.
람다식으로는 () -> T 로 표현한다.
반응형