[javascript] 클로저를 활용한 Currying 구현

클로저(closure)란 함수와 그 함수 내에서 선언된 변수의 조합을 말합니다. 클로저를 활용하면 함수형 프로그래밍에서 currying을 간단하게 구현할 수 있습니다.

Currying이란 무엇인가요?

Currying은 함수를 부분적으로 실행하여 나중에 남은 인수를 받아 실행하는 기법입니다. 예를 들어, add라는 함수가 있다면 add(2)(3)과 같이 두 번 호출하는 형태입니다. 이는 함수형 프로그래밍에서 다양한 활용이 가능합니다.

클로저를 이용한 Currying 구현

다음은 JavaScript를 사용하여 클로저를 활용해 currying을 구현하는 예제입니다.

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

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

const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3)); // 출력: 6

위 예제에서 curry 함수는 클로저를 활용하여 curried 함수를 반환합니다. curried 함수 내에서는 현재 받은 인수(args)와 추가로 받은 인수(moreArgs)를 합쳐 새로운 curried 함수를 반환하는 구조입니다. 이를 통해 curriedAdd를 통해 add 함수의 currying 버전을 만들고 활용할 수 있습니다.

클로저를 활용하면 currying 혹은 다른 함수형 프로그래밍 기법을 보다 간단하게 구현할 수 있습니다.

결론

클로저를 활용한 currying 구현은 함수형 프로그래밍에서 유용하게 활용될 수 있습니다. 이를 통해 코드의 가독성을 높이고 유지보수를 용이하게 할 수 있습니다.

Currying

위 이미지는 currying의 개념적인 이해를 도와줍니다.

참고: MDN Web Docs - Closures