더북(TheBook)

3.2.9 함수 재사용하기

함수를 쉽게 재사용하려면 타입 파라미터를 사용하는 다형적(polymorphic) 함수로 만들면 된다.

 

연습문제 3-2

compose 함수를 타입 파라미터를 사용하는 다형적 함수로 만들라.

힌트

fun 키워드와 함수 이름 사이에 타입 파라미터를 선언하라. 그리고 Int 타입을 올바른 타입 파라미터 이름으로 바꿔라. 이때 실행 순서에 주의하라. compose가 구현하는 함수 합성 f°gg를 먼저 적용하고 그 결과에 f를 적용해야 한다는 점을 기억하라. 타입이 매치되지 않으면 컴파일되지 않는다.

해법

이 연습문제는 함수 구현을 작성하는 문제가 아니다. 구현 자체는 다형적이지 않은 함수와 똑같다. 문제는 올바른 함수 시그니처를 찾아내는 것이다.

fun <T, U, V> compose(f: (U) -> V, g: (T) -> U): (T) -> V = { f(g(it)) }

여기서 파라미터화한 타입을 사용할 때 강력한 타입 시스템이 어떤 이점을 제공하는지 볼 수 있다. 타입 파라미터를 사용하면 compose 함수를 (타입이 매치되는 한) 모든 타입에 대해 작동하도록 정의할 수 있을 뿐 아니라 Int 버전과 달리 절대 그 구현이 잘못되지 않는다. fg를 뒤바꾼다면 이 코드는 컴파일되지 않는다.

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