반응형
LINQ란 무엇인가?
C#을 사용하는 개발자라면 한 번쯤은 접했거나 사용해본 적이 있을 LINQ (Language Integrated Query). LINQ는 C# 언어에 내장된 강력한 데이터 쿼리 기능으로, 데이터베이스, 컬렉션, XML, JSON 등 다양한 데이터 소스에 대해 일관된 방식으로 쿼리와 조작을 할 수 있게 해줍니다.
이 글에서는 LINQ의 기본 개념부터 실전 활용법까지 상세히 설명하며, 왜 C# 개발자에게 필수적인 기능인지 알아보겠습니다.
1. LINQ의 핵심 개념
1-1. 선언적 프로그래밍
LINQ는 선언적 프로그래밍 방식을 채택하고 있습니다. 즉, "어떻게" 수행하는지보다 "무엇을" 수행할지에 집중하는 방식입니다. 예를 들어, 컬렉션에서 특정 조건을 만족하는 데이터를 찾는 작업을 LINQ로 간단히 표현할 수 있습니다.
1-2. 쿼리 문법과 메서드 체인1-1. 선언적 프로그래밍
LINQ는 두 가지 문법을 지원합니다
- 쿼리 문법 (Query Syntax): SQL과 유사한 문법
- 메서드 체인 (Method Syntax): 람다식을 활용하는 방식
둘 다 동일한 기능을 수행하며, 상황에 따라 선택적으로 사용됩니다.
2. LINQ의 기본 사용법
2-1. 컬렉션에 대한 LINQ 쿼리
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// LINQ 쿼리 문법
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
Console.WriteLine("짝수 목록:");
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
이 예제는 리스트에서 짝수만 필터링하는 간단한 예제입니다.
3. LINQ의 실전 활용 예제
3-1. 데이터 필터링과 정렬
var filteredSorted = numbers
.Where(n => n > 3)
.OrderByDescending(n => n);
이 코드는 4 이상인 숫자를 내림차순으로 정렬하는 예제입니다.
3-2. 객체 컬렉션에서 특정 속성 추출
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
List<Person> people = new List<Person>
{
new Person { Name = "홍길동", Age = 30 },
new Person { Name = "이순신", Age = 45 },
new Person { Name = "유관순", Age = 20 }
};
var names = from person in people
where person.Age >= 30
select person.Name;
foreach (var name in names)
{
Console.WriteLine(name);
}
이 예제는 30세 이상인 사람들의 이름만 추출하는 방법입니다.
4. LINQ의 고급 기능
4-1. 그룹화 (GroupBy)
var groupedByAge = people.GroupBy(p => p.Age / 10 * 10);
foreach (var group in groupedByAge)
{
Console.WriteLine($"{group.Key}대:");
foreach (var person in group)
{
Console.WriteLine($" - {person.Name}");
}
}
이 코드는 나이대를 기준으로 그룹화하는 예제입니다.
4-2. 집계 함수 (Sum, Average, Max, Min)
int totalAge = people.Sum(p => p.Age);
double averageAge = people.Average(p => p.Age);
int maxAge = people.Max(p => p.Age);
int minAge = people.Min(p => p.Age);
이 함수들은 컬렉션의 데이터를 빠르게 분석하는 데 유용합니다.
5. LINQ 사용 시 유의사항
- 성능 고려: LINQ는 편리하지만, 대용량 데이터에서는 성능 저하가 발생할 수 있습니다. 필요시에는 적절한 인덱스와 최적화를 고려하세요.
- 즉시 실행 vs 지연 실행: LINQ 쿼리는 기본적으로 지연 실행(lazy evaluation)입니다. 즉, 쿼리 결과를 사용할 때 실제 데이터가 처리됩니다. ToList() 또는 ToArray()를 사용하면 즉시 실행됩니다.
반응형
'C#' 카테고리의 다른 글
| C#에서 폴더 내 이미지 파일 불러오기 (파일명, 확장자, 사이즈까지 한 번에) (0) | 2025.09.05 |
|---|---|
| C# Excel 파일 수정, 머지 Merge 방법 (0) | 2025.04.17 |
| C# DataTable 특정 컬럼 제거하기 (0) | 2025.04.09 |
| C# Base64 PDF 변환 (0) | 2025.04.03 |
| C# 콤보박스에 값 넣기 001 ~ 999 (0) | 2024.12.02 |