정명직의 게임개발

[C#] LINQ? 본문

C#/LINQ

[C#] LINQ?

정명직 2023. 7. 12. 21:12

LINQ?

LINQ (Language-Integrated Query)는 C# 언어에 내장된 데이터 질의 기능입니다. SQL같은 쿼리 언어의 기능을 직접 C# 코드에 통합하여, 효율적이고 읽기 쉬운 데이터 검색 및 필터링을 할 수 있게 해줍니다.

 

C#에서 LINQ 선언하는 법

LINQ의 기본 연산자

쿼리를 하는데에는 SQL문법을 사용하기 때문에 LINQ는 이러한 SQL의 문법을 가지고 다양한 쿼리를 통해 데이터를 가공하고 집계하는 등에 사용됩니다.

 

from : 어떤 데이터에서 찾을 것인지

where : 원하는 값을 추출하기 위한 조건

select : 데이터에서 어떤 항목을 추출할 것인지

order by : 어떤 항목을 기준으로정렬할 것인가

 

LINQ 기본 구조

LINQ 쿼리는 일반적으로 두 가지 형태로 사용됩니다.

  • Method Syntax (메서드 구문)
  • Query Syntax (쿼리 구문)

아래 예제를 통해 확인해보겠습니다.

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

// 메서드 구문
List<int> evenNumbersMethod = numbers.Where(n => n % 2 == 0).ToList();

// 쿼리 구문
List<int> evenNumbersQuery = (from num in numbers
                              where num % 2 == 0
                              select num).ToList();

위의 두 LINQ 쿼리 모두 동일한 [2, 4, 6, 8, 10] 짝수만 포함하는 리스트를 반환합니다.

첫 번째 예제는 Linq.Where() 메서드를 사용해서 리스트를 생성하였고, 두 번째 예제는 쿼리 구문을 사용하였습니다.

 

from : numbers라는 데이터의 각 요소를 LINQ 절에서 num으로 사용할 것이라고 명시

where : 요소 중에 2로 나누었을 때 나머지가 0인 것들을 찾는 조건

select : num을 추출

 

실전 예제

  레벨이 10 초과인 아이템 이름을 가져오는 로직을 LINQ을 사용해서 예를 들어보겠습니다.

class Item
{
  public string name;
  public int level;
}

class Program
{
  static void Main(string[] args)
  {
    List<Item> items = new List<Item>
    {
      new Item() { name = "Sword", level = 10},
      new Item() { name = "Bow", level = 15},
      new Item() { name = "Shield", level = 5},
    };

    var result = from item in items 
                     where  item.level > 10
                     select item.name;

    foreach (var name in result)
      Console.WriteLine(name);
  }
}

출력 결과는 "Bow" 가 출력되게 됩니다. 위 예제처럼 where 절에는 특정 프로퍼티에 대해 조건을 작성할 수 있으며, select 절에는 원하는 항목만 추출할 수 있습니다. 

 

 

LINQ의 장 단점

장점

  • 가독성 : 반목문, 조건문을 줄일 수 있기 때문에 코드가 단순해집니다.
  • 컴파일 타임 체크 : LINQ 쿼리는 컴파일 타임에 체크되므로, 개발 단계에서 버그를 빠르게 찾아낼 수 있습니다.

단점

  • 성능 : 간단한 작업에 대해서는 LINQ가 괜찮지만, 복잡한 쿼리에 대해서는 성능 문제가 발생할 수 있습니다.
  • 학습 곡선 : LINQ는 강력한 도구이지만, SQL과 다른 구문을 사용하므로 처음에는 학습이 어려울 수 있습니다.

 

정리

C#의 LINQ는 데이터 조작을 매우 효율적으로 수행할 수 있게 해주는 강력한 도구입니다.
SQL 같은 쿼리 언어를 배우지 않고도, 직관적인 코드로 데이터를 필터링, 정렬, 그룹화하는 등의 작업을 수행할 수 있습니다.
LINQ를 이해하고 익히면 C# 개발에 있어서 많은 이점을 얻을 수 있습니다.

'C# > LINQ' 카테고리의 다른 글

[C#] LINQ Any, All 메서드  (1) 2023.07.16