[C#] LINQ: 데이터 쿼리의 일관된 방식
안녕하세요! 이번 포스트에서는 C#의 LINQ(Language Integrated Query)에 대해 알아보겠습니다. LINQ는 C#에서 데이터 소스에 대한 쿼리를 일관된 방식으로 작성할 수 있게 해주는 강력한 기능입니다.
LINQ란 무엇인가요?
LINQ는 .NET 언어에서 데이터 쿼리를 통합하는 방법을 제공하는 기능입니다. LINQ를 사용하면 SQL과 유사한 구문을 사용하여 배열, 컬렉션, XML, 데이터베이스 등 다양한 데이터 소스에 쿼리를 작성할 수 있습니다.
LINQ의 기본 개념
LINQ는 다음과 같은 구성 요소를 포함합니다:
- LINQ to Objects: 배열, 리스트와 같은 메모리 내 컬렉션을 쿼리할 때 사용됩니다.
- LINQ to XML: XML 데이터를 쿼리할 때 사용됩니다.
- LINQ to SQL: 관계형 데이터베이스를 쿼리할 때 사용됩니다.
- LINQ to Entities: Entity Framework를 통해 데이터베이스를 쿼리할 때 사용됩니다.
LINQ의 기본 사용법
LINQ는 두 가지 구문 스타일을 제공합니다:
- 쿼리 식(Query Expression): SQL과 유사한 구문으로 작성됩니다.
- 메서드 체인(Method Chain): 메서드 호출을 체인으로 연결하여 작성됩니다.
1. LINQ 쿼리 식
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
위 예시에서 evenNumbers 쿼리는 배열 numbers에서 짝수만을 선택합니다.
2. LINQ 메서드 체인
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = numbers.Where(num => num % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
위 예시에서 Where 메서드를 사용하여 배열 numbers에서 짝수만을 선택합니다.
LINQ의 다양한 예제
1. 배열 및 컬렉션 쿼리
LINQ는 배열 및 컬렉션에서 데이터를 쉽게 쿼리할 수 있습니다.
string[] names = { "Alice", "Bob", "Charlie", "David" };
var filteredNames = from name in names
where name.Length > 3
select name;
foreach (var name in filteredNames)
{
Console.WriteLine(name);
}
위 예시에서 filteredNames 쿼리는 문자열 배열 names에서 길이가 3보다 큰 이름만을 선택합니다.
2. 정렬 및 그룹화
LINQ는 데이터를 정렬하고 그룹화하는 기능도 제공합니다.
var sortedNames = from name in names
orderby name
select name;
foreach (var name in sortedNames)
{
Console.WriteLine(name);
}
var groupedNames = from name in names
group name by name.Length into nameGroup
select nameGroup;
foreach (var group in groupedNames)
{
Console.WriteLine($"Length: {group.Key}");
foreach (var name in group)
{
Console.WriteLine(name);
}
}
위 예시에서 sortedNames 쿼리는 이름을 알파벳 순으로 정렬하고, groupedNames 쿼리는 이름을 길이에 따라 그룹화합니다.
3. 복잡한 객체 쿼리
LINQ는 복잡한 객체에서도 강력한 쿼리 기능을 제공합니다.
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
List<Student> students = new List<Student>
{
new Student { Name = "Alice", Age = 20 },
new Student { Name = "Bob", Age = 22 },
new Student { Name = "Charlie", Age = 21 }
};
var adultStudents = from student in students
where student.Age >= 21
select student;
foreach (var student in adultStudents)
{
Console.WriteLine($"{student.Name}, {student.Age}");
}
위 예시에서 adultStudents 쿼리는 학생 목록에서 나이가 21 이상인 학생만을 선택합니다.
LINQ의 장점
LINQ를 사용하면 다음과 같은 장점을 얻을 수 있습니다:
- 일관된 구문: 다양한 데이터 소스에 대해 동일한 구문을 사용할 수 있습니다.
- 강력한 기능: 정렬, 그룹화, 필터링 등 강력한 쿼리 기능을 제공합니다.
- 가독성: 쿼리 식을 사용하면 코드를 쉽게 읽고 이해할 수 있습니다.
- 타입 안전성: 컴파일 시점에 타입 검사를 수행하여 오류를 방지할 수 있습니다.
마치며
이번 포스트에서는 C#의 LINQ(Language Integrated Query)에 대해 알아보았습니다. LINQ는 배열, 컬렉션, XML, 데이터베이스 등 다양한 데이터 소스에 대해 일관된 방식으로 쿼리를 작성할 수 있는 강력한 도구입니다. LINQ를 활용하면 데이터 쿼리를 더욱 간결하고 효율적으로 작성할 수 있습니다. 추가적인 질문이나 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!
'Programming > C#' 카테고리의 다른 글
C# 박싱(Boxing)과 언박싱(Unboxing) 값 형식과 참조 형식의 변환 (0) | 2024.06.10 |
---|---|
C# 예외 처리 안전한 프로그램을 위한 필수 기술 (0) | 2024.06.10 |
C# 델리게이트(Delegate)의 다양한 사용법 (0) | 2024.06.09 |
C# 델리게이트(Delegate) 메서드 참조의 강력한 도구 (0) | 2024.06.09 |
C# 구조체(Struct) 경량화된 값 형식 (0) | 2024.06.09 |