자바스크립트에서 Currying을 사용하여 함수의 인자를 어떻게 정렬할 수 있나요?

Currying은 함수를 여러 단계로 나누어 전달할 수 있도록 하는 개념입니다. 이를 사용하면 함수의 인자를 보다 편리하게 정렬하고 재사용할 수 있습니다. JavaScript에서 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));
      };
    }
  };
}

위의 예제에서는 curry 함수를 정의하고, 인자로 받은 함수 fn에 대해 curried 함수를 반환하는 클로저를 생성합니다. 반환된 curried 함수는 인자를 충분히 전달했을 경우에는 fn을 호출하고 그렇지 않은 경우에는 새로운 curried 함수를 반환합니다.

함수의 인자 정렬하기

Currying을 사용하여 함수의 인자를 정렬하는 예제를 살펴보겠습니다.

function sortArgs(a, b, c) {
  const sorted = [a, b, c].sort((x, y) => x - y);
  console.log(sorted);
}

const curriedSortArgs = curry(sortArgs);

curriedSortArgs(3)(1)(2); // [1, 2, 3]

위의 예제에서는 sortArgs 함수를 정의하고, curry 함수를 사용하여 curriedSortArgs 함수를 생성합니다. 이후 curriedSortArgs 함수를 연속적으로 호출하면서 각각의 인자를 전달합니다. 최종적으로 모든 인자를 전달하면 sortArgs 함수를 실행하여 인자들을 정렬한 결과를 출력합니다.

위의 예제에서는 인자가 3개인 함수를 정렬하였지만, Currying을 사용하면 인자의 개수에 상관없이 편리하게 정렬할 수 있습니다. 필요에 따라 인자들을 여러 단계로 나눠서 전달할 수 있으므로 유연한 사용이 가능합니다.

#javascript #currying #함수인자정렬