목차
커링(Currying)
커링은 여러 개의 인수를 가진 함수를 단일 인수를 가진 함수들의 연쇄로 변환하는 프로세스를 말합니다. 클로저에서 커링을 통해 함수를 호출할 때 원래 함수와 같은 인수를 가진 새로운 함수를 반환할 수 있습니다.
예를 들어, 다음과 같이 add
함수를 커링할 수 있습니다.
(defn add [x y] (+ x y))
(def add-curried (partial add 10))
add-curried
는 add
함수의 x
에 10을 고정시킨 새로운 함수를 생성한 것입니다.
부분 적용(Partial Application)
부분 적용은 여러 개의 인수를 가진 함수에 대해 일부 인수를 고정한 새로운 함수를 생성하는 개념입니다. 클로저에서는 partial
함수를 사용하여 부분 적용을 할 수 있습니다.
예를 들어, 다음은 부분 적용을 사용한 예제입니다.
(def add-curried (partial + 10))
이제 add-curried
는 두 번째 인수를 10으로 고정시킨 +
함수의 새로운 인스턴스가 됩니다.
커링과 부분 적용의 차이
커링과 부분 적용은 모두 함수의 재활용성을 높이고, 코드 중복을 줄이며, 코드를 간결하게 만들어주는 장점이 있습니다. 그러나 두 가지 프로세스의 주요 차이점은 다음과 같습니다:
-
커링은 다중 인수를 가진 함수를 매개변수가 하나인 여러 함수들로 변환하는 반면, 부분 적용은 함수의 일부 매개변수를 고정하여 새로운 함수를 생성합니다.
-
커링은 항상 단일 인수를 가진 함수를 반환하지만, 부분 적용은 다중 인수를 가진 함수로부터 원하는 인수를 고정한 새로운 함수를 생성합니다.
결론
커링과 부분 적용은 둘 다 함수형 프로그래밍에서 유용한 개념이며, 클로저에서 이러한 개념을 적절하게 활용할 수 있습니다. 이러한 프로세스를 이해하고 활용하면 코드를 더욱 간결하게 작성할 수 있고, 유지보수가 쉬운 코드를 작성할 수 있게 됩니다.
참고 자료
- 클로저(Clojure) 공식 문서: https://clojure.org/
- “Functional Programming in Clojure” - Chas Emerick, Brian Carper, and Christophe Grand