[clojure] 커링된 함수를 사용한 데이터 구조 조작

커링은 함수형 프로그래밍에서 일반적으로 사용되는 개념으로, 여러 개의 파라미터를 가진 함수를 하나의 파라미터를 받는 함수들로 나누는 기법을 의미합니다. 이러한 기법은 코드의 모듈화재사용성을 증가시키는 데 도움이 됩니다. Clojure에서는 커링을 사용하여 데이터 구조를 조작하는데 매우 효과적으로 사용할 수 있습니다.

커링된 함수란?

커링된 함수는 원래 함수의 일부 파라미터를 고정한 새로운 함수를 만드는 기법입니다. Clojure에서는 partial 함수를 사용하여 커링된 함수를 생성할 수 있습니다. 예를 들어, 다음과 같이 add 함수를 커링하여 increment-by-5 함수를 만들 수 있습니다.

(def add (fn [a b] (+ a b)))
(def increment-by-5 (partial add 5))

위의 코드에서 increment-by-5 함수는 add 함수에 5를 고정한 새로운 함수가 됩니다.

데이터 구조 조작 예시

커링을 사용하여 데이터 구조를 조작하는 예시를 살펴봅시다. Clojure의 mapfilter 함수는 컬렉션을 처리하는데 매우 유용한 함수입니다. 다음은 커링된 함수를 사용하여 데이터를 조작하는 예시 코드입니다.

(def numbers (list 1 2 3 4 5))

(def add-10 (partial map #(+ 10 %)))
(def even? (partial filter #(= (mod % 2) 0)))

(def result (->> numbers
                 add-10
                 even?))

위의 코드에서 add-10 함수를 사용하여 리스트의 각 요소에 10을 더하고, even? 함수를 사용하여 짝수인 요소만을 필터링합니다. ->> 매크로를 사용하여 데이터를 순차적으로 mapfilter 함수에 전달하여 결과를 얻을 수 있습니다.

Clojure에서 커링된 함수를 사용하여 데이터 구조를 조작하는 방법에 대해 알아보았습니다. 이러한 기법을 활용하면 코드의 가독성유지보수성을 향상시킬 수 있습니다.

참고 자료