[javascript] Ramda를 활용한 데이터 그룹화

함수형 프로그래밍은 데이터를 효율적으로 다루는 방법론 중 하나입니다. 그 중에서도 Ramda는 JavaScript에 최적화된 함수형 라이브러리로, 데이터 그룹화와 같이 복잡한 작업을 간단하게 수행할 수 있습니다.

Ramda란?

Ramda는 함수형 프로그래밍을 위한 JavaScript 라이브러리로, 고차 함수와 커리(Currying)를 지원하여 데이터 처리를 간결하게 작성할 수 있도록 도와줍니다. Ramda를 사용하면 불변성을 유지하면서 데이터를 조작하고, 코드를 간결하게 작성할 수 있습니다.

데이터 그룹화

데이터 그룹화는 주어진 데이터를 특정 기준에 따라 그룹으로 묶는 작업을 말합니다. 예를 들어, 학생들의 점수를 과목별로 그룹화하거나, 날짜별로 로그를 분류하는 등 다양한 상황에서 사용됩니다.

Ramda를 사용하여 데이터 그룹화를 해보겠습니다. 다음은 학생들의 점수를 과목별로 그룹화하는 예제입니다.

const students = [
  { name: 'Alice', subject: 'Math', score: 80 },
  { name: 'Bob', subject: 'English', score: 90 },
  { name: 'Charlie', subject: 'Math', score: 85 },
  { name: 'Dave', subject: 'English', score: 95 },
  { name: 'Eve', subject: 'Math', score: 75 },
];

const groupBySubject = R.groupBy(R.prop('subject'));
const groupedStudents = groupBySubject(students);

console.log(groupedStudents);

위 코드에서 groupBySubject 함수를 사용하여 students 배열을 subject 필드를 기준으로 그룹화하였습니다. 그 결과, 과목별로 그룹화된 groupedStudents 객체를 출력합니다.

{
  Math: [
    { name: 'Alice', subject: 'Math', score: 80 },
    { name: 'Charlie', subject: 'Math', score: 85 },
    { name: 'Eve', subject: 'Math', score: 75 }
  ],
  English: [
    { name: 'Bob', subject: 'English', score: 90 },
    { name: 'Dave', subject: 'English', score: 95 }
  ]
}

위 결과를 보면, Math 과목과 English 과목별로 학생들이 그룹화된 것을 확인할 수 있습니다.

Ramda의 기능 활용

Ramda는 다양한 함수들을 제공하여 데이터 그룹화 외에도 다양한 작업을 수행할 수 있습니다. 예를 들어, 그룹화된 데이터에서 특정 그룹의 학생들의 평균 점수를 계산하고 싶다면 다음과 같이 작성할 수 있습니다.

const averageScore = R.pipe(
  R.prop('Math'),
  R.pluck('score'),
  R.mean
);

const mathAverage = averageScore(groupedStudents);
console.log(mathAverage); // 80

위 코드는 averageScore 함수를 사용하여 Math 그룹의 학생들의 평균 점수를 계산하고 출력하는 예제입니다.

Ramda 라이브러리를 사용하면 데이터 그룹화와 같이 복잡한 작업을 간결하게 처리할 수 있습니다. 함수형 프로그래밍의 장점을 활용하여 데이터를 효율적으로 다룰 수 있으니, 한 번쯤 시도해보시기 바랍니다.

참고자료