[clojure] 클로저에서의 커링과 재귀 함수

클로저는 함수형 프로그래밍 언어로, 많은 기능들을 지원합니다. 이 중에서도 커링(currying)과 재귀 함수(recursive function)는 클로저의 특징적인 기능 중 하나입니다. 이번 글에서는 클로저에서의 커링과 재귀 함수에 대해 알아보겠습니다.

커링(Currying)

커링은 여러 개의 인자를 받는 함수를 한 개의 인자를 받는 함수들의 연속으로 변환하는 것을 말합니다. 클로저에서는 partial 함수를 사용하여 커링을 구현할 수 있습니다. partial 함수는 함수와 일부 인자를 받아 해당 함수의 커리화된 버전을 생성합니다.

(defn add [x y]
  (+ x y))

(def add5 (partial add 5))

(add5 3) ; 8

위 예제에서 add5add 함수의 커리화된 버전으로, 첫 번째 인자로 5를 받아들이는 함수입니다.

재귀 함수(Recursive Function)

클로저에서 재귀 함수는 자기 자신을 호출하여 반복적으로 작업을 수행하는 함수를 말합니다. 클로저에서는 defn으로 함수를 정의하고, 함수 내에서 recur 키워드를 사용하여 자기 자신을 호출할 수 있습니다.

(defn countdown [n]
  (if (<= n 0)
    "Blastoff!"
    (str n ", " (recur (dec n)))))

(countdown 5) ; "5, 4, 3, 2, 1, Blastoff!"

위 예제는 재귀 함수를 사용하여 5부터 1까지의 숫자를 표시한 후 “Blastoff!”를 반환하는 예제입니다.

결론

클로저에서 커링과 재귀 함수는 함수형 프로그래밍에서 자주 사용되는 중요한 기법들입니다. 커링을 통해 코드의 재사용성을 높이고, 재귀 함수를 통해 간결하고 효율적인 코드를 작성할 수 있습니다.

이상으로 클로저에서의 커링과 재귀 함수에 대해 알아보았습니다.

참고 문헌: