Search

이것이 C#이다: 15장 - LINQ (1/2)

서론

데이터 처리는 현대 프로그래밍에서 가장 중요한 작업 중 하나입니다. 매일 수많은 개발자들이 데이터를 필터링하고, 정렬하고, 변환하는 코드를 작성합니다. C#은 이러한 데이터 처리 작업을 훨씬 효율적으로 수행할 수 있게 해주는 강력한 도구를 제공하는데, 바로 LINQ(Language INtegrated Query)입니다.

본론

1. LINQ의 이해

1.1 LINQ란?

LINQ는 C# 언어에 통합된 데이터 질의 기능입니다. 데이터베이스의 SQL과 유사하지만, 훨씬 더 보편적인 용도로 사용할 수 있습니다. LINQ를 사용하면 컬렉션, XML, 데이터베이스 등 다양한 데이터 소스에 대해 일관된 방식으로 질의를 수행할 수 있습니다.

1.2 LINQ 쿼리의 기본 구조

LINQ 쿼리는 다음과 같은 주요 요소들로 구성됩니다:
// 기본적인 LINQ 쿼리 구조 var query = from item in dataSource // 데이터 소스 지정 where item.Value > 10 // 필터링 조건 orderby item.Name // 정렬 기준 select item; // 결과 선택
C#
복사
각 요소는 SQL의 구문과 유사하지만, C# 코드 안에서 컴파일 시점의 타입 검사를 받을 수 있다는 장점이 있습니다.

2. LINQ의 주요 연산자

2.1 from 절

from은 모든 LINQ 쿼리의 시작점입니다. 이 연산자는 두 가지 중요한 요소를 지정합니다:
데이터 원본 (IEnumerable<T> 인터페이스를 구현한 컬렉션)
범위 변수 (각 요소를 참조하는 변수)
// IEnumerable<T> 컬렉션에서 데이터 추출 List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; var query = from num in numbers // num이 범위 변수 select num;
C#
복사
주요 포인트:
데이터 원본은 반드시 IEnumerable<T> 인터페이스를 구현해야 합니다.
범위 변수는 실제 데이터를 담지 않고, 쿼리 실행 계획을 표현하는 역할을 합니다.

2.2 where 절

where는 조건에 맞는 데이터만 필터링하는 연산자입니다. 복잡한 조건식도 사용할 수 있습니다.
// 짝수만 필터링하는 예제 var evenNumbers = from num in numbers where num % 2 == 0 select num;
C#
복사
where 절은 데이터 필터링을 담당합니다. 주요 특징은 다음과 같습니다:
조건식을 통한 데이터 필터링
복수의 조건을 && 또는 || 연산자로 결합 가능
성능상 가능한 한 일찍 필터링하는 것이 좋음

2.3 orderby 절

orderby는 데이터를 정렬하는 연산자입니다. 기본적으로 오름차순이며, descending 키워드로 내림차순 정렬이 가능합니다.
// 복수 기준 정렬 예제 var sortedItems = from item in items orderby item.Category ascending, item.Price descending select item;
C#
복사
orderby 절의 주요 기능:
기본값은 ascending (오름차순)
descending 키워드로 내림차순 정렬
복수의 정렬 기준 지정 가능 (콤마로 구분)

2.4 select 절

select는 최종 결과를 추출하는 연산자입니다. 원본 데이터를 그대로 가져오거나, 새로운 형태로 변환할 수 있습니다.
// 무명 형식을 사용한 데이터 변환 예제 var transformed = from item in items select new { Name = item.Name.ToUpper(), Price = item.Price * 1.1 };
C#
복사
select 절은 쿼리의 최종 결과를 결정합니다:
반환할 데이터의 형태 지정
익명 형식을 통한 새로운 데이터 구조 생성 가능
IEnumerable<T> 형태로 결과 반환

참고 자료

박상현, "이것이 C#이다", 한빛미디어, 2023