자바스크립트에서 Currying을 사용하여 함수의 실행 결과를 어떻게 정규화할 수 있나요?

Currying은 함수의 인자를 여러 개의 호출로 나누는 기법입니다. 이를 통해 인자가 하나씩 주어지면 각 호출마다 함수의 실행 결과를 정규화할 수 있습니다.

예를 들어, 다음과 같은 add 함수가 있다고 가정해봅시다.

function add(a, b) {
  return a + b;
}

이 함수를 Currying을 사용하여 정규화해보겠습니다.

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

const curriedAdd = curry(add);
console.log(curriedAdd(2)(3));
// 결과: 5

위의 코드에서 curried 함수는 원래 함수의 인자인 a와 b를 체크하고, 인자가 충분하면 실행 결과를 반환합니다. 그렇지 않을 경우, 다음 호출에 필요한 인자를 concat을 사용하여 합친 후에 다시 curried 함수를 반환합니다.

이제 curriedAdd 함수를 사용하여 add 함수를 Currying된 형태로 사용할 수 있게 되었습니다. 이를 통해 인자를 하나씩 주어 실행 결과를 얻을 수 있다는 장점이 있습니다.

Currying은 매우 유용한 패턴이며, 함수형 프로그래밍이나 선언형 프로그래밍에 자주 활용됩니다. 이를 통해 코드의 가독성과 재사용성을 높일 수 있습니다.

#javascript #currying