자바스크립트에서 Currying을 사용하여 함수 실행 중에 어떤 추가 작업을 어떻게 수행할 수 있나요?

함수형 프로그래밍에서 Currying은 함수를 여러 번 호출하여 하나의 인수 집합을 받는 다중 인수 함수를 만드는 기법입니다. Currying을 사용하면 함수 실행 중에 추가 작업을 수행할 수 있으며, 이는 매우 유용한 기능입니다. 이 글에서는 JavaScript에서 Currying을 사용하여 함수 실행 중에 추가 작업을 어떻게 수행할 수 있는지 알아보겠습니다.

Currying이란?

Currying은 함수를 작은 단위로 쪼개어 호출할 때마다 하나의 인수를 받도록 하는 기법입니다. 예를 들어, 두 개의 인수를 받는 함수를 Currying을 사용하여 하나의 인수를 받는 함수의 체인 형태로 만들 수 있습니다.

function add(x) {
  return function(y) {
    return x + y;
  };
}

const add5 = add(5); // 첫 번째 인수 5를 받는 함수 생성
console.log(add5(3)); // 5 + 3 = 8
console.log(add5(7)); // 5 + 7 = 12

위 예제에서 add 함수는 첫 번째 인수 x를 받고, 함수를 반환합니다. 반환된 함수는 두 번째 인수 y를 받아 x + y를 계산합니다. 이렇게 Currying된 함수는 첫 번째 인수를 받아 처리를 완료한 후, 나머지 인수를 받아 추가 작업을 수행할 수 있도록 합니다.

Currying을 사용한 추가 작업 수행하기

Currying을 사용하여 함수 실행 중에 추가 작업을 수행하려면, 반환된 함수에서 추가 작업을 수행한 후, 다시 새로운 함수를 반환해야 합니다. 이를 통해 체인 형태로 계속해서 작업을 추가하거나, 원하는 시점에 실행을 완료할 수 있습니다.

function add(x) {
  let sum = x;

  function innerAdd(y) {
    sum += y;
    return innerAdd;
  }

  innerAdd.toString = function() {
    return sum;
  };

  return innerAdd;
}

console.log(add(1)(2)(3)(4)); // 10

위 예제에서 add 함수는 입력된 인수와 누적된 값을 저장하고 있는 sum 변수를 가지며, innerAdd 함수를 반환합니다. innerAdd 함수는 입력된 인수 ysum에 더한 후, 다시 innerAdd 함수를 반환합니다. 반환된 함수 또한 같은 작업을 반복할 수 있도록 합니다.

마지막으로, innerAdd 함수에 toString 메서드를 추가하여, 함수를 문자열로 변환했을 때 누적된 값을 출력할 수 있도록 합니다. 이를 통해 console.log(add(1)(2)(3)(4))의 결과는 10으로 출력되게 됩니다.

정리

JavaScript에서 Currying을 사용하여 함수 실행 중에 추가 작업을 수행할 수 있습니다. Currying을 이용하면 함수를 체인 형태로 연결하여 작업을 추가할 수 있으며, 이는 함수형 프로그래밍과 관련된 개념입니다. Currying을 적절히 활용하면 코드를 좀 더 선언적으로 작성할 수 있고, 재사용성을 높일 수 있습니다.

#Currying #함수형프로그래밍