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

Currying은 함수를 여러 개의 인자를 받는 대신, 하나의 인자를 받는 함수들의 연속으로 변환하는 기술입니다. 이를 통해 함수의 실행 결과를 자르거나 분할하는 작업이 가능합니다.

자바스크립트에서 Currying을 구현하는 방법은 다양하지만, 일반적으로 클로저와 익명 함수를 이용하여 구현합니다. 아래는 간단한 예시 코드입니다:

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

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

let curriedAdd = curry(add);
let add2 = curriedAdd(2); // 첫 번째 인자를 고정한 커링 함수 생성

console.log(add2(4)); // 6
console.log(add2(6)); // 8

위의 코드에서 먼저 curry 함수를 정의합니다. 이 함수는 func라는 인자를 받아 클로저를 반환하는 함수입니다. 반환된 클로저는 인자를 받으면서, 받은 인자가 함수 원본(func)의 인자 개수보다 많은지 검사합니다. 만약 인자 개수가 충분하다면 func를 호출하고, 그렇지 않으면 새로운 클로저를 반환하여 다음 인자를 기다립니다.

다음으로 add 함수를 정의하고, curry 함수를 이용해 curriedAdd를 생성합니다. curriedAdd는 첫 번째 인자(a)를 고정한 커링 함수입니다. 이후에는 add2라는 커링 함수를 사용하여 인자(b)를 추가로 받을 수 있게 됩니다.

이제 add2 함수를 이용해 add 함수의 실행 결과를 원하는대로 자를 수 있습니다. 예를 들어, 위의 코드에서는 add2(4)를 호출하면 a가 2로 고정되고 b가 4로 주어진 상태의 함수를 실행한 결과인 6이 출력됩니다.

Currying을 사용하면 함수의 실행 결과를 필요한 만큼 재사용하거나 조합할 수 있는 유연성을 얻을 수 있습니다. 이를 통해 코드의 가독성과 재사용성을 높일 수 있습니다.

#Currying #자바스크립트