커리한 함수를 부분 적용하면 똑같은 결과를 얻을 수 있다.

    val tc9 = addTax(0.09)
    val price = tc9(12.0)

    여기서 addTax 함수는 3.3.7절 마지막에서 온 함수고, tc9의 타입은 (Double) -> Double이다. 이 함수는 Double을 인자로 받아 세금을 추가한 Double 값을 반환한다.

    커링과 부분 적용이 서로 밀접히 연관됐음을 알 수 있다. 커링은 튜플을 인자로 받는 함수를 한 번에 하나씩 인자를 부분 적용할 수 있는 함수로 대치하는 과정이다. 튜플을 받는 함수와 커리한 함수의 가장 큰 차이가 바로 부분 적용이다. 튜플을 받는 함수의 경우 함수를 적용하기 전에 모든 인자를 평가해야 한다.

    커리한 버전을 사용해 모든 인자를 적용하려면 사전에 인자를 미리 알고 있어야 한다. 하지만 인자를 하나만 계산해서 이 인자를 함수에 부분 적용할 수 있다. 함수를 완전히 커리한 함수로 만들어야 하는 것은 아니다. 인자가 세 개인 함수는 튜플을 인자로 받아서 인자가 하나인 함수를 반환하는 식으로 커링할 수도 있다.

    추상화는 프로그래밍의 핵심이다. 커링과 부분 적용 함수를 자동으로 수행하기 위해 추상화한다. 이 절부터는 튜플을 인자로 받는 함수를 사용하지 않고 대부분 커리한 함수를 사용한다. 커리한 함수를 사용하면 부분 적용이 아주 단순하다는 장점이 있다.

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