추상화에는 두 가지 측면이 있다. 클라이언트 코드와 구현 코드이다. 지금까지는 클라이언트와
구현 코드가 모두 객체 지향이었거나 모두 함수형이었다. 객체 지향인 경우 필드가 설정을 운
반하고 클라이언트가 메서드를 호출한다. 함수형 방식에서는 함수가 설정을 클로저에 포획하
고, 클라이언트는 함수(클로저)를 호출한다.
이런 접근 방법을 하나로 합쳐서, 함수를 받는 클라이언트에 객체 지향 구현을 넘기거나, 객
체 지향 구현을 받는 클라이언트에게 함수를 넘길 수 있을까? 또는, 코틀린 용어로 말하자면,
ISendEmail
을
(
Email
) ->
Unit
타입으로 변환하거나 역방향으로 변환할 수 있을까? 우리
는 그렇게 할 수 있다!
자바와 코틀린에서 함수 타입은 인터페이스에 불과하다는 점을 기억하라. 이로 인해
EmailSender
는
Consumer
<
Email
>
나
(
Email
) ->
Unit
각 타입에 적절한 시그니처의 메서
드를 정의함으로써 각각을 구현할 수 있다.
자바라면 다음과 같이 쓸 수 있다.
public class EmailSender
implements ISendEmail,
Consumer<Email>
➊
{
...
@Override
public void accept(Email email) ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.