자바스크립트에서 Currying을 사용하여 함수의 호출 시점을 어떻게 조절할 수 있나요?

Currying을 구현하는 가장 간단한 방법은 클로저를 사용하는 것입니다. 클로저는 내부 함수에서 외부 함수의 변수에 접근할 수 있도록 해줍니다. 아래는 Currying을 사용한 예제 코드입니다.

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

// Currying된 함수를 호출
let increment = add(1);
console.log(increment(5)); // 6

// 또 다른 방법으로 Currying된 함수를 한 번에 호출
console.log(add(3)(2)); // 5

위 코드에서 add 함수는 첫 번째 인자 x를 받고, 그 값을 두 번째 함수로 전달하여 더한 후 결과를 반환합니다. 이렇게 나눠진 호출은 각각의 인자를 전달하여 호출할 수 있습니다.

첫 번째 호출에서 add(1)x 변수에 1을 할당하고, 나머지 y 값을 받기 위해 함수를 반환합니다. 이후 increment(5)의 호출은 x 값에 1이 유지되며, y 값으로 5를 전달하여 1 + 5의 결과인 6을 반환합니다.

두 번째 호출은 add(3)(2)를 한 번에 호출하여 x 값을 3으로, y 값을 2로 설정하고 결과인 5를 반환합니다.

Currying을 사용하면 함수 호출의 시점을 자유롭게 조절할 수 있고, 함수의 재사용성과 유지보수성을 높일 수 있습니다. 또한, 부분 적용이 가능해져 코드의 가독성과 유연성을 높일 수 있습니다.

#javascript #currying