자바스크립트에서 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));
      };
    }
  };
}

위의 curry 함수는 인자로 받은 함수를 Currying이 적용된 새로운 함수로 변환합니다. 변환된 함수는 인자를 받을 때마다 원본 함수에 적용하며, 인자가 충분하게 전달되면 원본 함수를 호출하고, 그렇지 않으면 새로운 함수를 반환합니다.

Currying을 이용하여 함수의 형식을 확장하는 예시를 살펴보겠습니다:

function sum(a, b, c) {
  return a + b + c;
}

const curriedSum = curry(sum);

const add2 = curriedSum(2);
const add2And3 = add2(3);

console.log(add2And3(5)); // 결과: 10

위의 예시에서는 sum 함수를 curriedSum으로 Currying 변환하고, add2 함수를 생성하여 첫 번째 인자를 2로 설정합니다. 그리고 add2 함수를 호출하여 두 번째 인자를 3으로 설정하고, 마지막으로 add2And3 함수를 호출하여 세 번째 인자를 5로 설정합니다. 이렇게 순차적으로 인자를 전달하면서 함수의 형식을 유연하게 확장할 수 있습니다.

Currying을 이용하면 함수의 재사용성을 높이고 유지보수를 용이하게 할 수 있습니다. 또한 함수를 조립하여 더 복잡한 동작을 수행할 수 있는 함수형 프로그래밍에 활용할 수 있습니다.

#Currying #함수확장