더북(TheBook)

3.3.4 다형적 HOF 정의하기

앞에서 정의한 compose 함수는 Int에서 Int로 가는 함수만 처리할 수 있지만, 다형적 compose 함수를 사용하면 여러 다른 타입의 함수를 합성할 수 있다. 단, 한 함수의 반환 타입이 다른 함수의 인자 타입과 같아야 한다.

 

연습문제 3-5(어려움)

다형적 compose 함수를 작성하라.

힌트

코틀린이 다형적 프로퍼티8를 제공하지 않기 때문에 문제가 생긴다. 코틀린에서는 다형적 클래스, 인터페이스, 함수를 정의할 수 있다. 하지만 다형적 프로퍼티는 정의할 수 없다. 따라서 프로퍼티가 아니라 함수, 클래스, 인터페이스 중 하나에 정의할 함수를 저장해서 해결해야 한다.

해법

연습문제 3-3을 파라미터화하면 될 것 같아 보인다.

val <T, U, V> higherCompose: ((U) -> V) -> ((T) -> U) -> (T) -> V =
    { f ->
        { g ->
            { x -> f(g(x)) }
        }
    }

 

 


8 역주 뜬금없이 프로퍼티 이야기가 왜 나오는지 궁금할 수 있다. 클래스나 패키지 내부에서 val을 선언하는 것은 코틀린 언어 개념으로는 불변 변수가 아니라 프로퍼티를 선언하는 것이어서 그렇다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.