자바스크립트에서 Currying을 사용하여 함수의 결과를 어떻게 필터링할 수 있나요?

간단한 예를 통해 Currying을 사용한 필터링 작업을 살펴보겠습니다. 다음은 기본적인 Currying 함수입니다.

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

Currying 함수는 다른 함수를 인자로 받고, 두 개의 중첩된 함수를 반환합니다. 첫 번째 함수에서 인자를 받아서, 인자의 개수가 원래 함수의 인자 개수보다 많거나 같으면 원본 함수를 호출합니다. 만약 인자 개수가 더 적다면, 두 번째 함수를 반환하고 다음 호출에서 남은 인자를 기억하도록 합니다.

이제 Currying을 사용하여 숫자 배열을 필터링하는 예제를 만들어 보겠습니다.

const filterNumbers = curry(function (condition, numbers) {
  return numbers.filter(condition);
});

const isEven = function (number) {
  return number % 2 === 0;
};

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const evenNumbers = filterNumbers(isEven);
console.log(evenNumbers(numbers)); // [2, 4, 6, 8, 10]

const oddNumbers = filterNumbers(function (number) {
  return number % 2 !== 0;
});
console.log(oddNumbers(numbers)); // [1, 3, 5, 7, 9]

위의 예제에서는 filterNumbers 함수를 Currying을 사용하여 숫자 배열을 필터링하는 함수로 변환했습니다. 이를 이용하여 isEven 함수를 이용해 짝수를 필터링하거나, 익명 함수를 이용해 홀수를 필터링할 수 있습니다.

Currying은 코드를 좀 더 모듈화하고 재사용성을 높일 수 있는 강력한 프로그래밍 기법입니다. 함수의 결과를 필터링하는 기능 외에도, 각 인자에 대해 유효성 검사나 기본 값 설정 등 유연한 함수 작성을 가능하게 합니다. 프로젝트에서 Currying을 사용하여 함수를 작성해보세요! #Currying #자바스크립트