Currying 은 1967년 Christopher Strachey 가 Haskell Brooks Curry의 이름에서 온 것입니다.
Currying은 여러개의 인자를 가진 함수를 호출 할 경우, 파라미터의 수보다 적은 수의 파라미터를 인자로 받으면 누락된 파라미터를 인자로 받는 기법을 말합니다. 코드부터 살펴보겠습니다.
sum 함수는 간단합니다. x, y 두 변수를 받아서 x + y 를합니다. 당연히 sum(3, 4)를 하게되면 3+4 = 7 이 수행 됩니다.
first에 (3)만 인자로 넘어올 경우에는 3 + y 를 반환합니다. second는 y를 입력받아 3 + y를 평가합니다. y에 4가 넘어와야 3+4가 평가되어 7을 반환합니다.
결과적으로 sum(x : Int, y : Int)는 sum(3, 4)처럼 여러개의 파라미터를 한번에 받습니다. 이런 메소드들을 first(3)(4)처럼 하나 씩 분리해서 받는 기법을 currying(커링) 이라고 합니다. 이렇게 분리해서 받을 때의 이점은 무엇일까요??
- 여러 파라미터를 한번 에 받지않고 부분적으로 받은 후 함수의 실행을 늦 출수 있습니다.(전체가 아닌 부분적으로 파라미터를 받는다고 해서 함수가 실행되지 않는다)
- second 메소드 처럼 변하지 않는 부분은 별도로 정의함으로 써 간단하게 재사용 할 수 있습니다.
- ints 예제처럼, 누락된 파라미터를 자동? 으로 전달 받을 수 있습니다.
간단하게 String을 사용한 예제를 공유하고 마치겠습니다.