프로그래밍/C#

LINQ: C#에서 데이터 쿼리의 혁신

shimdh 2025. 9. 1. 09:36
728x90

LINQ(Language Integrated Query)는 C#에서 제공하는 강력한 기능으로, 다양한 데이터 소스를 일관된 문법으로 쿼리할 수 있게 해줍니다. 이 블로그에서는 LINQ의 주요 개념과 사용 예제를 통해 LINQ의 장점과 활용 방법을 알아보겠습니다.

LINQ 쿼리 문법의 주요 개념

데이터 소스

LINQ는 IEnumerable<T> 또는 IQueryable<T>를 구현하는 모든 컬렉션과 함께 작동할 수 있습니다. 배열, 리스트, 데이터베이스 등 다양한 데이터 소스를 지원합니다.

쿼리 구조

LINQ 쿼리는 다음과 같은 구성 요소로 이루어져 있습니다:

  • From 절: 데이터 소스를 지정합니다.
  • Where 절: 조건에 따라 결과를 필터링합니다.
  • Select 절: 원하는 출력 형식을 투영합니다.

지연 실행

쿼리는 열거될 때까지 실행되지 않습니다. 이는 복잡한 쿼리를 즉시 실행하지 않고도 구축할 수 있음을 의미합니다.

연산 체이닝

여러 절을 연결하여 쿼리를 더욱 세밀하게 조정할 수 있습니다.

728x90

기본 예제

정수 리스트에서 짝수를 필터링하는 예제를 살펴보겠습니다:

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 };

        var evenNumbers = from num in numbers
                          where num % 2 == 0
                          select num;

        Console.WriteLine("Even Numbers:");
        foreach (var number in evenNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

이 예제에서는 from 절로 데이터 소스를 정의하고, where 절로 짝수를 필터링하며, select 절로 필터링된 숫자를 반환합니다.

더 복잡한 예제

학생의 이름과 성적을 포함하는 객체로 표현된 학생 리스트를 사용한 예제를 살펴보겠습니다:

public class Student
{
    public string Name { get; set; }
    public int Grade { get; set; }
}

class Program
{
    static void Main()
    {
        List<Student> students = new List<Student>
        {
            new Student { Name = "Alice", Grade = 85 },
            new Student { Name = "Bob", Grade = 92 },
            new Student { Name = "Charlie", Grade = 78 },
            new Student { Name = "David", Grade = 88 }
        };

        var highAchievers =
            from student in students
            where student.Grade > 80
            orderby student.Name ascending
            select new 
            {
                student.Name,
                student.Grade 
            };

        Console.WriteLine("High Achievers:");
        foreach (var achiever in highAchievers)
        {
            Console.WriteLine($"{achiever.Name}: {achiever.Grade}");
        }
    }
}

이 시나리오에서는 성적이 80점을 초과하는 학생들만 선택하며, 이름을 알파벳 순으로 정렬한 후 익명 타입으로 이름과 성적을 투영합니다.

LINQ 쿼리 문법 사용의 이점

  1. 가독성: 구조가 자연어 또는 SQL과 유사하여 개발자가 코드를 처음 볼 때 무엇을 하는지 쉽게 이해할 수 있습니다.
  2. 간결성: 필터링이나 컬렉션 변환을 위한 전통적인 루프에 비해 적은 코드로 작성할 수 있습니다.
  3. 유연성: 배열 쿼리에서부터 Entity Framework를 통한 데이터베이스 레코드 접근까지 다양한 데이터 소스에서 사용할 수 있습니다.
  4. 다른 기능과의 통합: 메서드 문법과 결합할 때 확장 메서드 및 람다 표현식과 같은 다른 C# 기능과 원활하게 작동합니다.

LINQ의 기능을 쿼리 문법을 통해 효과적으로 활용함으로써, 애플리케이션 내에서 데이터 조작 작업을 단순화하는 깔끔하고 효율적인 코드를 작성할 수 있습니다!

728x90