[clojure] 클로저 커링을 이용한 함수 컴포지션

클로저에서 함수 커링(currying)과 함께 함수 컴포지션(composition)을 사용하면 코드를 간결하게 유지하면서도 읽기 쉽고 모듈화할 수 있습니다. 이 기사에서는 클로저에서 함수 커링과 함수 컴포지션을 함께 사용하는 방법을 알아보겠습니다.

함수 커링

함수 커링은 여러 개의 인자를 받는 함수를 단일 인자를 받는 연속된 함수들의 체인으로 바꾸는 과정입니다. 예를 들어, 두 개의 인자를 받는 함수를 커링하면 첫 번째 인자를 받아들이고 두 번째 인자를 받는 함수를 반환하는 새로운 함수를 얻게 됩니다. 이 방식을 이용하면 다음과 같이 간단한 함수를 만들 수 있습니다.

(defn add [x y] (+ x y))
(def add2 (partial add 2))
(add2 4) ; 출력: 6

위의 예제에서 add 함수를 add2 같이 인자 하나를 받는 함수로 커링한 것을 볼 수 있습니다.

함수 컴포지션

함수 컴포지션은 두 개 이상의 함수를 연결하여 새로운 함수를 만드는 것입니다. 클로저에서 함수 컴포지션은 comp 함수를 사용하여 이루어집니다.

(defn square [x] (* x x))
(defn inc [x] (+ x 1))
(def square-inc (comp inc square))
(square-inc 2) ; 출력: 5

위의 예제에서 square 함수와 inc 함수를 comp를 이용하여 결합해서 square-inc라는 새로운 함수를 만든 것을 볼 수 있습니다.

함수 커링과 함수 컴포지션의 결합

함수 커링과 함수 컴포지션을 함께 사용하면 코드를 간결하게 유지하면서도 재사용 가능하고 모듈화된 함수를 만들 수 있습니다. 아래의 예제는 이를 보여줍니다.

(defn add [x y] (+ x y))
(def add2 (partial add 2))
(def inc [x] (+ x 1))
(def add2-inc (comp inc add2))
(add2-inc 4) ; 출력: 7

위의 예제에서 add2-inc 함수는 add 함수의 커링과 inc 함수의 컴포지션을 결합한 것을 볼 수 있습니다. 이렇게 함으로써 코드를 더욱 모듈화하고 재사용성을 높일 수 있습니다.

클로저에서 함수 커링과 함수 컴포지션을 결합하여 사용하면 간결한 코드를 작성할 수 있고, 함수형 프로그래밍의 장점을 최대한 활용할 수 있습니다.