[javascript] Ramda를 활용한 함수형 프로그래밍 패턴

함수형 프로그래밍은 변경 가능한 상태를 피하고 대신 데이터를 변환하기 위해 순수 함수를 사용하는 프로그래밍 패러다임입니다. 이로써 코드의 테스트, 유지보수, 재사용성을 향상시킬 수 있습니다.

Ramda는 자바스크립트에서 함수형 프로그래밍을 지원하는 라이브러리입니다. 이번 블로그 포스트에서는 Ramda를 활용하여 몇 가지 함수형 프로그래밍 패턴을 살펴보겠습니다.

커링 (Currying)

커링은 여러 개의 인자를 가진 함수를 단일 인자를 받는 함수들의 연속으로 변환하는 기술입니다. 이를 통해 코드의 재사용성과 가독성을 향상시킬 수 있습니다. Ramda는 curry 함수를 제공하여 커링을 간편하게 사용할 수 있습니다.

const add = (a, b) => a + b;
const curriedAdd = R.curry(add);

console.log(curriedAdd(1)(2)); // 3
console.log(curriedAdd(1, 2)); // 3

함수 합성 (Function Composition)

함수 합성은 함수를 조합하여 새로운 함수를 만드는 기술입니다. Ramda는 compose 함수를 제공하여 함수 합성을 간편하게 사용할 수 있습니다.

const multiplyBy2 = (n) => n * 2;
const add3 = (n) => n + 3;

const multiplyBy2AndAdd3 = R.compose(add3, multiplyBy2);

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

데이터 변환 (Data Transform)

Ramda는 다양한 배열 및 객체 변환 함수를 제공하여 데이터 변환을 수행할 수 있습니다. 예를 들어, map, filter, reduce 등의 함수를 사용하여 배열에 대한 변환을 수행할 수 있습니다.

const numbers = [1, 2, 3, 4, 5];

const squared = R.map((n) => n * n, numbers);
console.log(squared); // [1, 4, 9, 16, 25]

const evenNumbers = R.filter((n) => n % 2 === 0, numbers);
console.log(evenNumbers); // [2, 4]

const sum = R.reduce((acc, n) => acc + n, 0, numbers);
console.log(sum); // 15

불변성 유지 (Immutable)

함수형 프로그래밍은 변경 가능한 상태를 피하고 불변성을 유지함으로써 안정성과 예측 가능성을 높입니다. Ramda는 불변성을 유지하는 함수들을 제공하여 객체 및 배열을 안전하게 다룰 수 있습니다.

const person = {
  name: 'John',
  age: 30,
};

const updatedPerson = R.set(R.lensProp('age'), 31, person);
console.log(updatedPerson); // { name: 'John', age: 31 }

const numbers = [1, 2, 3];
const updatedNumbers = R.append(4, numbers);
console.log(updatedNumbers); // [1, 2, 3, 4]

이와 같이 Ramda를 활용하면 함수형 프로그래밍 패턴을 쉽게 사용할 수 있습니다. 코드의 테스트, 유지보수, 재사용성을 향상시키기 위해 Ramda를 고려해보세요.

더 자세한 정보는 Ramda 공식 문서를 참조하세요.