addTax 함수는 Double의 쌍 하나를 인자로 받는다. (자바와 달리 코틀린에서는 세 개 이상의 인자를 받는 함수도 만들 수 있다. 자바에서는 인자가 하나인 경우 Function 인터페이스를, 두 개인 경우 BiFunction 인터페이스를 쓸 수 있다. 하지만 세 개 이상의 인자가 필요하면 직접 인터페이스를 정의해야 한다.)

    그런데 커리한 버전을 사용해 같은 결과를 얻을 수 있다. 커리한 함수는 인자가 하나뿐이며 인자가 하나뿐인 다른 함수를 반환하는 함수다. 이때 반환하는 함수도 마찬가지로 인자가 하나뿐인 다른 함수를 반환하는 함수일 수 있다. 이런 과정이 결과 값을 반환할 때까지 반복된다. 다음은 addTax를 함수 값으로 사용하는 커리한 버전을 보여준다.

    val taxRate = 0.09
    
    val addTax = { taxRate: Double ->
                     { price: Double ->
                         price + price * taxRate
                     }
                 }
    
    println(addTax(taxRate)(12.0))

    fun 함수를 커리한 버전은 의미가 거의 없다. addTax에서 첫 번째 함수는 fun을 사용해 정의할 수 있지만, 반환하는 함수는 반드시 함수 값을 사용해야 한다. fun 함수는 값이 아니기 때문에 반환할 수가 없다.

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