[javascript] Ramda의 커리(Currying) 개념과 활용

함수형 프로그래밍에서 커리(Currying)는 매개변수를 여러 개 가지는 함수를 한 개의 매개변수를 가진 함수들의 연속으로 바꾸는 것을 말합니다. 이를 통해 함수를 조합하고 재사용 가능한 유연한 코드를 작성할 수 있습니다.

커리의 개념

커리란, 함수를 호출할 때 하나의 인자만 받고 나머지 인자들을 받는 함수를 리턴하는 것을 의미합니다. 이렇게 변형된 함수는 인자가 모두 채워질 때까지 계속해서 새로운 함수를 반환합니다. 이를 통해 우리는 인자를 하나씩 적용하면서 원하는 시점에 함수를 실행할 수 있게 됩니다.

예를 들어, 다음은 add 함수를 커리 함수로 변형한 예시입니다.

const add = (a, b) => a + b;

const curriedAdd = a => b => a + b;

const addFive = curriedAdd(5);

console.log(addFive(3)); // 8
console.log(curriedAdd(2)(4)); // 6

위의 코드에서 add 함수는 두 개의 인자를 받아서 더한 값을 리턴하는 함수입니다. curriedAdd 함수는 하나의 인자를 받아서 함수를 리턴하는 함수로, 각각의 반환된 함수들은 하나의 인자를 더 받아서 결과를 리턴하는 커리 함수입니다. addFive는 5를 인자로 받아서 5를 더해주는 커리 함수입니다.

Ramda에서의 커리

Ramda는 자바스크립트의 함수형 라이브러리로, 커리 개념을 적극적으로 활용하고 있습니다. Ramda의 함수들은 기본적으로 커리 함수로 작성되어 있으므로, 함수를 부분 적용하거나 조합하는 작업이 간단하고 유연합니다.

예를 들어, Ramda의 add 함수는 커리 함수로 구현되어 있습니다.

const R = require('ramda');

const addFive = R.add(5);
console.log(addFive(3)); // 8

Ramda의 add 함수는 하나의 인자를 받아서 더하는 커리 함수이므로, addFive 변수에 5를 더해주는 함수가 저장되어 있습니다.

Ramda는 함수 조합을 위한 다양한 함수들을 제공하는데, 이들 함수들은 커리 함수로 작성되어 있어서 부분 적용이 쉽습니다. 예를 들어, pipe 함수는 여러 함수를 순차적으로 조합하는 함수입니다.

const multiplyByTwo = R.multiply(2);
const addThree = R.add(3);

const calculate = R.pipe(
  multiplyByTwo,
  addThree
);

console.log(calculate(4)); // 11

위의 코드에서 calculate 함수는 multiplyByTwoaddThree 함수를 순차적으로 적용하여 결과를 반환하는 함수입니다. calculate 함수에 4를 인자로 넘기면, 4를 먼저 2배로 만든 다음 3을 더해준 결과인 11이 리턴됩니다.

결론

Ramda의 커리 개념은 함수형 프로그래밍의 중요한 기법 중 하나입니다. 커리 함수를 사용하면 함수를 조합하고 편리하게 재사용할 수 있습니다. Ramda는 커리 함수를 통해 함수형 프로그래밍을 더욱 쉽고 유연하게 구현할 수 있게 해주는 라이브러리입니다.

참조: Ramda 공식 문서