프로그래밍/C#

LINQ: C# 개발자를 위한 강력한 쿼리 도구

shimdh 2025. 9. 2. 00:15
728x90

C# 개발자에게 LINQ는 데이터 쿼리의 혁신을 가져다주는 도구입니다. 데이터베이스, XML, 메모리 내 컬렉션 등 다양한 소스를 일관되게 쿼리할 수 있는 LINQ의 매력을 알아봅니다.

LINQ의 기본 개념

LINQ(Language Integrated Query)는 C#에서 제공하는 기능으로, 프로그래밍 언어 내에서 직접 쿼리를 작성할 수 있게 해줍니다. 이는 데이터베이스, XML 문서, 메모리 내 컬렉션 등 다양한 데이터 소스를 일관된 방식으로 쿼리할 수 있는 방법을 제공합니다. LINQ의 매력은 친숙한 구문을 사용하여 쿼리를 작성할 수 있을 뿐만 아니라 C#의 강력한 타입 시스템과 매끄럽게 통합된다는 점에 있습니다.

LINQ to Objects 이해하기

LINQ to Objects는 배열, 리스트, 기타 열거 가능한 타입과 같은 메모리 내 컬렉션을 쿼리하는 것을 의미합니다. 이 기능을 통해 별도의 쿼리 언어나 API를 사용할 필요 없이 컬렉션 작업 시 C# 언어의 모든 기능을 활용할 수 있습니다.

주요 측면

  • 통합성: IEnumerable<T>를 구현하는 모든 컬렉션에서 표준 쿼리 연산자를 사용할 수 있어 쉽고 직관적입니다.
  • 가독성: LINQ를 사용하여 작성된 쿼리는 전통적인 루프나 수동 필터링 방법에 비해 더 읽기 쉽습니다.
  • 지연 실행: 많은 LINQ 연산은 결과를 반복할 때까지 실행되지 않습니다. 이는 복잡한 쿼리를 필요할 때까지 실행하지 않고 구축할 수 있음을 의미합니다.
728x90

LINQ의 기본 구문

LINQ는 쿼리 구문메서드 구문을 통해 사용할 수 있으며, 각각 SQL과 유사한 문장과 객체에 대한 메서드 호출을 사용합니다.

예제 1: 쿼리 구문

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// 쿼리 구문 사용
var evenNumbers = from number in numbers
                  where number % 2 == 0
                  select number;

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

이 예제에서는 정수 리스트에서 짝수만 선택하는 쿼리를 생성합니다.

예제 2: 메서드 구문

// 메서드 구문 사용
var oddNumbers = numbers.Where(n => n % 2 != 0).ToList();

foreach (var num in oddNumbers)
{
    Console.WriteLine(num);
}

여기서는 .Where()를 사용한 메서드 체이닝으로 홀수를 선택합니다.

LINQ의 일반적인 작업

  1. 데이터 필터링: .Where()를 사용하여 조건에 따라 요소를 필터링합니다.
  2. var filteredNames = names.Where(name => name.StartsWith("A")).ToList();
  3. 데이터 정렬: .OrderBy().OrderByDescending()를 사용하여 컬렉션을 정렬합니다.
  4. var sortedNames = names.OrderBy(name => name.Length).ToList();
  5. 데이터 그룹화: .GroupBy()를 사용하여 키를 기준으로 항목을 그룹화합니다.
  6. var groupedByLength = names.GroupBy(name => name.Length).ToList();
  7. 데이터 집계: .Count(), .Sum(), .Average()와 같은 메서드를 사용하여 집계 작업을 수행합니다.
  8. int totalCount = numbers.Count(); double averageValue = numbers.Average();
  9. 컬렉션 조인: join을 사용하여 SQL 조인과 유사하게 두 컬렉션을 함께 조인할 수 있습니다.
  10. var students = new List<Student> { new Student { Id=1, Name="Alice", CourseId=101 }, new Student { Id=2, Name="Bob", CourseId=102 } }; var courses = new List<Course> { new Course { Id=101, Title="Mathematics" }, new Course { Id=102, Title="Science" } }; // 학생과 과목 조인 var studentCourses = from student in students join course in courses on student.CourseId equals course.Id into scGroup select new { StudentName = student.Name, CourseTitle = scGroup.FirstOrDefault()?.Title };

이 예제는 두 개의 다른 데이터 세트를 효과적으로 연결하는 방법을 보여줍니다.

결론

LINQ는 중급 C#에서 컬렉션 작업 시 필수적인 도구입니다. 코드의 가독성과 유지보수성을 향상시키며, 코드베이스 내에서 강력한 쿼리 기능을 제공합니다. 쿼리 구문과 메서드 구문을 모두 마스터하고 필터링 및 집계와 같은 일반적인 작업을 수행하면 .NET 애플리케이션을 다루는 개발자로서의 생산성이 크게 향상될 것입니다!

728x90