C# GroupBy() 메서드란?
GroupBy()는 System.Linq 네임스페이스에 포함된 확장 메서드로, 지정된 키(key) 값을 기준으로 컬렉션의 요소들을 여러 그룹으로 묶어 반환합니다. 각 그룹은 고유한 Key 속성을 가지며, 해당 키 조건에 부합하는 요소들이 함께 담기게 됩니다.
데이터 분류, 통계 집계, 보고서 생성 등 다양한 상황에서 유용하게 활용되며, SQL의 GROUP BY 절과 유사한 역할을 수행한다고 이해하면 쉽습니다.
예제: 50을 기준으로 요소 그룹화하기
먼저 다음과 같은 정수 배열이 있다고 가정해 보겠습니다.
int[] arr = { 2, 30, 45, 60, 70 };이제 GroupBy()를 활용하여 50 이하의 숫자와 50 초과의 숫자를 각각 하나의 그룹으로 묶어 보겠습니다.
arr.GroupBy(b => chkSmaller(b));
여기서 chkSmaller()는 매개변수로 받은 값이 50 이하인지 검사하여 true 또는 false를 반환하는 판별 메서드입니다. 즉, 이 불리언(bool) 반환값이 곧 그룹화의 키가 되는 것입니다.
전체 코드
using System;
using System.Linq;
class Demo {
static void Main() {
int[] arr = { 2, 30, 45, 60, 70 };
var check = arr.GroupBy(b => chkSmaller(b));
foreach (var val in check) {
Console.WriteLine(val.Key);
foreach (var res in val) {
Console.WriteLine(res);
}
}
}
static bool chkSmaller(int a) {
return a <= 50;
}
}
실행 결과
True
2
30
45
False
60
70
결과 해설
실행 결과를 살펴보면, 먼저 True라는 키가 출력되고 그 아래에 50 이하인 요소들(2, 30, 45)이 나열됩니다. 이어서 False 키와 함께 50을 초과하는 요소들(60, 70)이 출력됩니다.
구조적으로 보면 외부 foreach 루프는 각 그룹(IGrouping 객체)을 순회하며 그룹의 Key를 출력하고, 내부 foreach 루프는 해당 그룹에 속한 개별 요소들을 차례대로 화면에 표시합니다. 이처럼 GroupBy()는 람다 식이나 델리게이트를 통해 유연하게 그룹화 기준을 정의할 수 있어, 복잡한 데이터 분류 작업도 간결한 코드로 처리할 수 있습니다.