» [C#] Linq 개념 및 사용 방법

[C#] Linq 개념 및 사용 방법

by DUBUKIMCH

LINQ란?

LINQ (Language Integrated Query)는 C#과 같은 .NET 언어에서 데이터 소스를 일관성 있는 방식으로 쿼리할 수 있도록 설계된 기능입니다. LINQ는 데이터베이스, 컬렉션, XML, 엔터티 프레임워크 등 다양한 데이터 소스를 대상으로 작동하며, SQL과 유사한 구문을 제공합니다.

LINQ는 메서드 구문(Method Syntax)쿼리 구문(Query Syntax)이라는 두 가지 구문 스타일을 지원합니다. LINQ를 사용하면 복잡한 데이터 필터링, 정렬, 그룹화 등을 간단하고 직관적인 코드로 구현할 수 있습니다.

LINQ의 주요 특징

  1. 강력한 타입 검사: 컴파일 시점에 쿼리의 타입을 검사합니다.
  2. 일관된 데이터 액세스: 다양한 데이터 소스에 대해 동일한 구문을 사용합니다.
  3. 지연 실행 (Deferred Execution): 데이터 처리가 필요한 시점까지 실행을 연기할 수 있습니다.
  4. 가독성: 복잡한 데이터를 간결하고 읽기 쉬운 코드로 처리할 수 있습니다.

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의 장점

  1. 간결한 코드: 데이터 필터링, 정렬, 그룹화를 간단히 작성 가능.
  2. 확장성: 데이터베이스, XML, JSON 등 다양한 소스와 연결.
  3. 타입 안전성: 컴파일 시점에 오류를 방지.

LINQ의 단점

  1. 퍼포먼스 고려 필요: 대규모 데이터셋에서는 비효율적일 수 있음.
  2. 디버깅 어려움: 복잡한 쿼리에서는 디버깅이 어렵거나 비직관적일 수 있음.

You may also like

Leave a Comment

error: Content is protected !!