자바스크립트에서 Currying을 통해 어떻게 함수 합성을 구현할 수 있나요?

함수 합성(Function Composition)은 함수들을 결합하여 새로운 함수를 생성하는 프로그래밍 기법입니다. 이를 통해 코드의 재사용성과 가독성을 높일 수 있습니다.

Currying은 인자를 여러 개 받는 함수를 인자가 하나인 함수들의 연속으로 변환하는 기법입니다. 이를 통해 함수 합성을 구현할 수 있습니다. 자바스크립트에서 Currying을 사용하여 함수 합성을 구현하는 방법을 알아보겠습니다.

Currying 함수 구현하기

function curry(fn) {
  return function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function(...moreArgs) {
        return curried.apply(this, args.concat(moreArgs));
      };
    }
  };
}

위의 코드는 Currying을 구현하는 curry 함수입니다. 이 함수는 인자로 받은 함수 fn을 Currying된 함수로 변환하여 반환합니다. 반환된 함수는 인자를 받을 때마다 원래 함수 fn을 호출하거나 새로운 Currying된 함수를 반환하는 방식으로 동작합니다.

함수 합성하기

이제 Currying된 함수를 사용하여 함수 합성을 구현해보겠습니다.

// 함수 합성 예제
function add(a, b) {
  return a + b;
}

function multiply(a, b) {
  return a * b;
}

function subtract(a, b) {
  return a - b;
}

// Currying된 함수 생성
const curriedAdd = curry(add);
const curriedMultiply = curry(multiply);
const curriedSubtract = curry(subtract);

// 함수 합성
const composedFn = curriedAdd(1)(2); // 첫 번째 인자 1을 받는 curriedAdd 함수를 호출한 후, 두 번째 인자 2를 받는 curriedAdd 함수를 반환
const result = curriedMultiply(composedFn)(3); // composedFn을 받는 curriedMultiply 함수를 호출한 후, 세 번째 인자 3을 받는 curriedMultiply 함수를 반환

console.log(result); // 9

위의 코드는 add, multiply, subtract 함수를 정의하고, 이를 Currying된 함수로 변환한 뒤에 함수 합성을 통해 결과를 도출하는 예제입니다. curry 함수로 각 함수를 Currying된 함수로 변환한 후에, 원하는 인자를 순차적으로 넣어가며 함수를 합성할 수 있습니다.

종합

위에서 살펴본 것처럼 자바스크립트에서 Currying을 통해 함수 합성을 구현할 수 있습니다. Currying된 함수를 생성한 뒤에 필요한 인자를 순차적으로 넣어가며 함수를 합성할 수 있습니다. 이를 통해 코드의 재사용성과 가독성을 높일 수 있으며, 복잡한 로직을 간결하게 표현할 수 있습니다.

#Currying #함수합성