자바스크립트에서 Currying을 사용하여 함수의 부분 집합을 어떻게 정의할 수 있나요?

Currying을 사용하여 함수의 부분 집합을 정의하는 방법은 다음과 같습니다:

  1. 원본 함수를 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));
      };
    }
  };
}
  1. 부분 집합을 생성하려는 원본 함수를 정의합니다. 예를 들어, 덧셈 함수를 부분 집합으로 정의하는 경우:
function add(a, b, c) {
  return a + b + c;
}

const addPartial = curry(add);

const addOne = addPartial(1); // 첫 번째 인수를 1로 고정한 부분 집합 함수 생성
const addTwo = addPartial(2); // 첫 번째 인수를 2로 고정한 부분 집합 함수 생성

console.log(addOne(2, 3)); // 1 + 2 + 3 = 6
console.log(addTwo(3, 4)); // 2 + 3 + 4 = 9

위 예제에서 curry 함수를 사용하여 원본 함수 add를 Currying 함수로 변환합니다. 그런 다음 addPartial을 사용하여 첫 번째 인수를 고정한 부분 집합 함수 addOneaddTwo를 생성합니다. addOne은 첫 번째 인수로 1을 받아들이고, addTwo는 첫 번째 인수로 2를 받아들입니다. 이렇게 생성된 부분 집합 함수들은 나중에 필요한 인수를 추가로 받아 원본 함수를 호출하며, 원하는 결과를 얻을 수 있습니다.

Currying을 사용하면 함수의 재사용성과 확장성을 높일 수 있습니다. 부분 집합에서 불필요한 인수를 미리 고정하여 함수를 호출하는 방식으로 코드를 더 간결하고 유연하게 작성할 수 있습니다.