31
LINQ란?
LINQ (Language Integrated Query)는 C#과 같은 .NET 언어에서 데이터 소스를 일관성 있는 방식으로 쿼리할 수 있도록 설계된 기능입니다. LINQ는 데이터베이스, 컬렉션, XML, 엔터티 프레임워크 등 다양한 데이터 소스를 대상으로 작동하며, SQL과 유사한 구문을 제공합니다.
LINQ는 메서드 구문(Method Syntax)과 쿼리 구문(Query Syntax)이라는 두 가지 구문 스타일을 지원합니다. LINQ를 사용하면 복잡한 데이터 필터링, 정렬, 그룹화 등을 간단하고 직관적인 코드로 구현할 수 있습니다.
LINQ의 주요 특징
- 강력한 타입 검사: 컴파일 시점에 쿼리의 타입을 검사합니다.
- 일관된 데이터 액세스: 다양한 데이터 소스에 대해 동일한 구문을 사용합니다.
- 지연 실행 (Deferred Execution): 데이터 처리가 필요한 시점까지 실행을 연기할 수 있습니다.
- 가독성: 복잡한 데이터를 간결하고 읽기 쉬운 코드로 처리할 수 있습니다.
LINQ의 사용 예시
1. 기본 LINQ 쿼리
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// 데이터 소스
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// LINQ 쿼리 구문 (Query Syntax)
var evenNumbers = from number in numbers
where number % 2 == 0
select number;
// 출력
Console.WriteLine("짝수 목록 (Query Syntax):");
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
// LINQ 메서드 구문 (Method Syntax)
var oddNumbers = numbers.Where(n => n % 2 != 0);
// 출력
Console.WriteLine("\n홀수 목록 (Method Syntax):");
foreach (var num in oddNumbers)
{
Console.WriteLine(num);
}
}
}
결과 내용
짝수 목록 (Query Syntax):
2
4
6
8
10
홀수 목록 (Method Syntax):
1
3
5
7
9
2. LINQ를 사용한 그룹화와 정렬
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// 데이터 소스
List<string> names = new List<string> { "Alice", "Bob", "Charlie", "Anna", "Albert", "Brian" };
// 이름을 첫 글자 기준으로 그룹화하고 정렬
var groupedNames = from name in names
group name by name[0] into grouped
orderby grouped.Key
select grouped;
// 출력
Console.WriteLine("이름 그룹화 및 정렬:");
foreach (var group in groupedNames)
{
Console.WriteLine($"'{group.Key}'로 시작하는 이름:");
foreach (var name in group)
{
Console.WriteLine($" - {name}");
}
}
}
}
결과 내용
이름 그룹화 및 정렬:
'A'로 시작하는 이름:
- Alice
- Anna
- Albert
'B'로 시작하는 이름:
- Bob
- Brian
'C'로 시작하는 이름:
- Charlie
3. LINQ를 사용한 복잡한 객체 필터링
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
class Product
{
public string Name { get; set; }
public int Price { get; set; }
}
static void Main()
{
// 데이터 소스
List<Product> products = new List<Product>
{
new Product { Name = "Laptop", Price = 1000 },
new Product { Name = "Phone", Price = 500 },
new Product { Name = "Tablet", Price = 700 },
new Product { Name = "Monitor", Price = 300 }
};
// LINQ를 사용해 500 이상인 제품 필터링
var expensiveProducts = from product in products
where product.Price >= 500
select product;
// 출력
Console.WriteLine("가격이 500 이상인 제품:");
foreach (var product in expensiveProducts)
{
Console.WriteLine($"- {product.Name} (${product.Price})");
}
}
}
결과내용
가격이 500 이상인 제품:
- Laptop ($1000)
- Phone ($500)
- Tablet ($700)
LINQ의 장점
- 간결한 코드: 데이터 필터링, 정렬, 그룹화를 간단히 작성 가능.
- 확장성: 데이터베이스, XML, JSON 등 다양한 소스와 연결.
- 타입 안전성: 컴파일 시점에 오류를 방지.
LINQ의 단점
- 퍼포먼스 고려 필요: 대규모 데이터셋에서는 비효율적일 수 있음.
- 디버깅 어려움: 복잡한 쿼리에서는 디버깅이 어렵거나 비직관적일 수 있음.