우리가 지금까지 살펴본 '함수적 인터페이스'의 기본 성질이 무엇이었나요? 뜬금없이 느껴지겠지만, 너무나도 기본적인 내용이니 잘 기억하실 것입니다. 바로 "하나의 추상 메서드를 가지고 있으며, 람다식을 통해 해당 추상 메서드를 재정의 한 익명 구현 객체를 생성할 수 있는 것"입니다.
이 정의를 지금 왜 다시 꺼냈을까요? 지금부터는 함수적 인터페이스의 정적 메서드와 디폴트 메서드에 대해서 다룰 예정이기 때문입니다. 자, 특정 함수적 인터페이스가 한 개의 기본 추상 메서드를 갖고 있는데 - 여기에 다른 정적 메서드나 디폴트 메서드를 갖고 있다면...더이상 함수적 인터페이스가 아니게 되는 것일까요?
결론만 얘기하면, 아닙니다.
함수적 인터페이스는, 기본 추상 메서드를 한 개만 갖고 있는 게 맞다면 정적 메서드와 디폴트 메서드를 선언하더라도 여전히 함수적 인터페이스로서의 성질을 유지합니다.
자, 지금 또 인터페이스의 정적 메서드와 디폴트 메서드의 정의가 생각 안나시는 분들이 있을 것입니다. 다시 한번 복습하고 가도록 합시다.
자, 그러면 이제 andThen( )과 compose( )의 정의에 대해서 차근차근 살펴보겠습니다. 참고로 이 두 개의 디폴트 메서드는 Consumer, Function, Operator 인터페이스가 갖고 있습니다.
andThen( )과 compose( )는 두 개의 함수적 인터페이스를 순차적으로 연결하고, 첫 번째 처리 결과를 두 번째 파라미터로 제공하여 최종적으로 결과값을 산출할 때 사용하게 됩니다.
andThen( )과 compose( )는 개념상 거의 같은 역할을 수행하지만, 차이점은 있습니다. 바로 두 개의 인터페이스를 다룰 때의 처리 순서입니다.
· andThen( ) : 인터페이스A, B가 있다고 가정하자. 인터페이스A.andThen(인터페이스B) 를 실행하면 인터페이스A 처리 후 결과값을 인터페이스B의 매개값으로 전달하고, 인터페이스B는 제공받은 매개값을 가지고 처리한 후 최종 결과를 산출한다.
· compose( ) : 인터페이스A, B가 있다고 가정하자. 인터페이스A.compose(인터페이스B)
를 실행하면 인터페이스B 처리 후 결괏값을 인터페이스A의 매개값으로 전달하고, 인터페이스A는 제공받은 매개값을 가지고 처리한 후 최종 결과를 산출한다.
위에서 보다시피 두 개의 디폴트 메서드는 정 반대의 처리 순서를 가지고 있다는 특징이 있습니다. 간단하게 형태상 예시 코드를 작성해 볼까요? 임의의 함수적 인터페이스(Consumer라고 상상해 주셔도 됩니다)가 있을 때, 아래와 같이 사용하게 됩니다.
인터페이스AB = 인터페이스A.andThen(인터페이스B);
최종결과 = 인터페이스AB.method();
인터페이스AB = 인터페이스A.compose(인터페이스B);
최종결과 = 인터페이스AB.method();
위의 예제가 선뜻 이해가 되지 않을 수도 있습니다. 하지만 아티클 후반부에 나오는 실제 예제코드를 보시면 좀 더 쉽게 활용방법이 이해가 되실 것이니 너무 걱정하지 않으셔도 됩니다.
각 인터페이스에서, andThen( )과 compose( ) 디폴트 메서드가 모두 제공되는 것은 아닙니다. 아래의 표를 참조해서 사용해 주시기 바랍니다.
종류 | 함수적 인터페이스 | andThen() | compose() |
Consumer | Consumer<T> | O | |
BiConsumer<T, U> | O | ||
DoubleConsumer | O | ||
IntConsumer | O | ||
LongConsumer | O | ||
Function | Function<T, R> | O | O |
BiFunction<T, U, R> | O | ||
Operator | BinaryOperator<T> | O | |
DoubleUnaryOperator | O | O | |
IntUnaryOperator | O | O | |
LongUnaryOperator | O | O |
'Programming > JAVA' 카테고리의 다른 글
람다식(4) - 표준 API의 함수적 인터페이스 7 : 디폴트 메서드 andThen(), compose() 3 (0) | 2023.07.31 |
---|---|
람다식(4) - 표준 API의 함수적 인터페이스 7 : 디폴트 메서드 andThen(), compose() 2 (0) | 2023.07.27 |
람다식(4) - 표준 API의 함수적 인터페이스 6 : Predicate Functional Interface (0) | 2023.07.11 |
람다식(4) - 표준 API의 함수적 인터페이스 5 : Operator Functional Interface 2 (0) | 2023.07.03 |
람다식(4) - 표준 API의 함수적 인터페이스 5 : Operator Functional Interface 1 (0) | 2023.06.18 |