더북(TheBook)

연습문제 3-9(쉬움)

다음 함수를 커리한 함수로 변환하라.

fun <A, B, C, D> func(a: A, b: B, c: C, d: D): String = "$a, $b, $c, $d"

이 함수가 전혀 쓸모없다는 점에는 여러분도 동의할 것이다. 이 함수는 그냥 연습용이다.

해법

여기서도 튜플의 원소를 구분하는 콤마(,)를 화살표로 바꾸고 괄호를 추가하는 정도밖에는 할 일이 없다. 하지만 이 함수가 타입 파라미터를 받을 수 있는 영역 안에 정의해야 한다는 점을 기억하라. 프로퍼티로 함수를 정의할 수 없다. 따라서 타입 파라미터를 받기 위해 클래스나 인스턴스 또는 fun 함수를 정의해야 한다.

다음은 함수를 사용하는 해법이다. 먼저 반환할 함수를 둘러쌀, 타입 파라미터를 받는 fun 함수를 정의하자.

fun <A, B, C, D> curried()

이제 결과 함수의 시그니처를 생각해 보자. 첫 번째 파라미터는 A 타입의 값이다. 따라서 다음과 같이 쓸 수 있다.

fun <A, B, C, D> curried(): (A) ->
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.