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

함수형 프로그래밍에서 Currying은 함수의 인자를 부분적으로 받아들여 새로운 함수를 반환하는 개념입니다. 이를 통해 함수의 인자를 유연하게 결합하고 재사용성을 높일 수 있습니다. 이번 글에서는 자바스크립트에서 Currying을 사용하여 함수의 인자를 결합하는 방법을 알아보겠습니다.

Currying이란?

Currying은 이름을 따온 Haskell 프로그래밍 언어의 철학자 Haskell Curry에게서 유래한 개념입니다. 이는 인자를 하나씩 받아들여 여러 개의 함수를 생성하는 기술입니다. 예를 들어, 두 숫자를 더하는 함수 add를 Currying을 적용하여 addCurried라는 새로운 함수를 만들 수 있습니다.

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

const addCurried = (x) => (y) => x + y;

위의 예시에서 addCurried 함수는 add 함수와 동일한 기능을 수행하지만 인자를 하나씩 부분적으로 받아들이는 형태로 구현되었습니다.

Currying의 장점

Currying을 사용함으로써 여러 가지 장점을 얻을 수 있습니다.

1. 인자 결합

Currying을 사용하면 필요한 인자를 부분적으로 받아들여서 결합할 수 있습니다. 이를 통해 재사용성이 높은 함수를 구현할 수 있습니다.

예를 들어, add 함수에서 특정한 값을 고정해야 하는 경우가 있다고 가정해봅시다.

const addFive = addCurried(5);
addFive(3); // 8

위의 예시에서 addFive 함수는 항상 5를 첫 번째 인자로 받아들이게 되어, 두 번째 인자만 받으면 됩니다. 이렇게 인자를 결합하여 새로운 함수를 만들 수 있습니다.

2. 함수 합성

Currying된 함수를 활용하면 함수 합성을 간편하게 구현할 수 있습니다. 함수 합성은 두 개 이상의 함수를 조합하여 새로운 함수를 만드는 것을 말합니다. Currying을 사용하면 함수 합성을 더욱 쉽게 처리할 수 있습니다.

아래 예시에서 addCurriedmultiplyCurried 함수를 조합하여 calculate 함수를 만들어봅시다.

const multiplyCurried = (x) => (y) => x * y;
const calculate = (x) => multiplyCurried(addCurried(x));

calculate(2)(3); // 10

위의 예시에서 calculate 함수는 addCurriedmultiplyCurried 함수를 조합하여 새로운 함수를 만들게 됩니다. 이렇게 함수 합성을 통해 코드를 간결하게 유지할 수 있습니다.

결론

Currying은 함수형 프로그래밍에서 유용한 개념으로, 자바스크립트에서도 쉽게 활용할 수 있습니다. 함수의 인자를 부분적으로 결합하여 함수의 재사용성과 코드의 간결성을 높일 수 있습니다. Currying을 사용하는 것은 복잡한 코드를 단순화하고, 함수 합성을 통한 유연함을 얻는 데 도움이 됩니다.

#JavaScript #Currying