[javascript] Ramda를 활용한 데이터 필터링

Ramda는 JavaScript 함수형 프로그래밍 라이브러리로, 데이터 처리 및 변환을 더 간결하고 선언적으로 작성할 수 있게 해줍니다. 이번 글에서는 Ramda를 사용하여 데이터 필터링을 수행하는 방법에 대해 알아보겠습니다.

필터링 기능 소개

Ramda는 다양한 데이터 처리 기능을 제공하지만, 그 중에서도 filter 함수를 활용하면 데이터를 원하는 조건으로 필터링할 수 있습니다. filter 함수는 배열을 순회하면서 각 원소에 대해 주어진 조건 함수를 적용하고, 조건을 만족하는 원소만으로 이루어진 새로운 배열을 반환합니다.

const R = require('ramda');

const data = [
  { name: 'John', age: 25 },
  { name: 'Jane', age: 30 },
  { name: 'Mike', age: 28 }
];

const filteredData = R.filter(person => person.age < 30, data);

console.log(filteredData);
// 출력: [{ name: 'John', age: 25 }, { name: 'Mike', age: 28 }]

위 코드에서는 data 배열에서 age가 30보다 작은 사람들만 필터링하여 filteredData 배열에 저장한 후 출력하고 있습니다.

조건 함수 작성하기

filter 함수를 사용하기 위해서는 조건 함수를 작성해야 합니다. 조건 함수는 인자로 받은 원소가 조건을 만족하는지를 판단하는 역할을 합니다. 이 함수는 true 또는 false를 반환해야 합니다.

조건 함수는 다양한 방법으로 작성할 수 있습니다. 예를 들어, Ramda의 prop 함수를 사용하여 특정 속성의 값을 비교하는 조건 함수를 작성할 수 있습니다.

const R = require('ramda');

const data = [
  { name: 'John', age: 25 },
  { name: 'Jane', age: 30 },
  { name: 'Mike', age: 28 }
];

const filteredData = R.filter(R.propSatisfies(age => age < 30, 'age'), data);

console.log(filteredData);
// 출력: [{ name: 'John', age: 25 }, { name: 'Mike', age: 28 }]

위 코드에서는 propSatisfies 함수를 사용하여 age 속성의 값이 30보다 작은지를 확인하는 조건 함수를 작성하였습니다.

여러 조건을 조합하기

Ramda의 filter 함수를 활용하면 여러 개의 조건을 조합하여 복잡한 필터링 로직을 구현할 수 있습니다. 예를 들어, 나이가 25보다 크고 이름이 ‘Jane’인 사람들을 찾는다고 가정해보겠습니다.

const R = require('ramda');

const data = [
  { name: 'John', age: 25 },
  { name: 'Jane', age: 30 },
  { name: 'Mike', age: 28 }
];

const filteredData = R.filter(
  R.allPass([
    R.propSatisfies(age => age > 25, 'age'),
    R.propEq('name', 'Jane')
  ]),
  data
);

console.log(filteredData);
// 출력: [{ name: 'Jane', age: 30 }]

위 코드에서는 allPass 함수를 사용하여 두 개의 조건 함수를 모두 만족하는 경우를 필터링하였습니다. propEq 함수는 특정 속성의 값이 주어진 값과 동일한지를 확인하는 조건 함수입니다.

마무리

Ramda를 사용하여 데이터를 필터링하는 방법에 대해 알아보았습니다. Ramda의 함수형 API는 데이터 처리를 더욱 간결하고 가독성 높게 만들어줍니다. 필터링 외에도 다양한 데이터 처리 기능을 Ramda를 통해 구현할 수 있으니, 관심 있는 분들은 더 깊게 공부해보시기 바랍니다.

참고 자료