LINQ란?
LINQ는 Language Integrated Query의 약자로 통합된 질의 언어를 의미합니다.
C# 언어의 강력한 기능 중 하나로, 데이터 집합을 쿼리하는 표준화된 방법을 제공합니다.
즉, LINQ를 통해 컬렉션 형태를 띄는 모든 데이터에 질의를 할 수 있으며, 데이터 처리와 관련된 복잡한 로직을 직관적이고 명확하게 표현할 수 있습니다.
사용 예시 1
간단히 1 ~ 10의 데이터가 들어있는 리스트에서 5 이상의 데이터들을 추출한다고 가정해보도록 하겠습니다.
일반적으로 작성한다면 다음과 같은 형태의 코드가 만들어질 것입니다.
List<int> ints = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<int> answer = new List<int>();
foreach (int num in ints)
{
if (num >= 5)
{
answer.Add(num);
}
}
answer : 5 6 7 8 9
이를 LINQ 쿼리식을 사용하여 다시 작성해본다면?
List<int> ints = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9};
// ints에 들어있는 값들 중 5 이상의 값들을 추출하기 위한 기본 쿼리 구문
// * .ToList()로 반환타입 List로 수정
List<int> answer = (from n in ints where n >= 5 select n).ToList();
answer : 5 6 7 8 9
동일한 결과를 가지지만 더욱 간결하게 작성이 가능한 것을 확인할 수 있습니다.
또한 람다식을 활용하여 더욱 간편하게 구현이 가능합니다.
// 메서드 구문(위와 동일한 결과)
List<int> answer = ints.Where(n => n >= 5).ToList();
answer : 5 6 7 8 9
LINQ의 기본 구조
- from - 어떤 데이터에서 값을 추출할 것인지
- where - 원하는 값을 추출하기 위한 조건
- select - 데이터에서 어떤 항목을 추출할 것인지
From절
LINQ에서 from절은 데이터 소스로부터 데이터를 가져오는 역할을 수행합니다.
// from 개별 데이터 in 소스 데이터
from n in ints
Where절
LINQ에서 where절은 추출된 데이터가 특정 조건을 만족하는지 필터링 해주는 역할을 수행합니다.
// ints로부터 추출한 n이 5보다 같거나 큰 경우를 판별
from n in ints where n >= 5
Orderby절 (정렬)
LINQ에서 orderby절은 데이터 소스에서 추출된 요소들을 특정한 기준에 따라 정렬하는 역할을 수행합니다.
- ascending : 오름차순
- descending : 내림차순
Select절
LINQ에서 select절은 결과물을 원하는 형태로 변형하여 최종적인 결과물을 뽑아내는 역할을 수행합니다.
예시에서 만약 추출 결과물을 해당 요소의 제곱으로 출력하고 싶은 경우라면 select 절을 n * n으로 수정해주면 됩니다.
// 출력 결과 : 25 36 49 ...
List<int> answer = (from n in ints where n >= 5 select n * n).ToList();
사용 예시 2
마지막으로 LINQ 쿼리식을 사용해 Num과 Name 멤버변수를 가지는 간단한 클래스를 만들고 특정 조건에 따라 필터링 한 후 정렬하는 코드를 작성해보도록 하겠습니다.
class Test
{
public Test(int num, string name)
{
Num = num;
Name = name;
}
public int Num { get; set; }
public string Name { get; set; }
}
static void Main(string[] args)
{
List<Test> tests = new List<Test>();
tests.Add(new Test(num: 20, name: "홍길동"));
tests.Add(new Test(num: 8, name: "짱구"));
tests.Add(new Test(num: 15, name: "철수"));
// tests에서 num이 10 이상인 요소를 num 순으로 정렬하기
List<Test> result = (from t in tests where t.Num >= 10 orderby t.Num ascending select t).ToList();
// tests에서 num이 10 이상인 요소를 num 순으로 정렬하기
List<Test> result2 = tests.Where(n => n.Num >= 10).OrderBy(n => n.Num).ToList();
}
'Game Programming > C#' 카테고리의 다른 글
[C#] 람다식 (0) | 2024.06.30 |
---|---|
[C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy) (0) | 2024.06.29 |
[C#] 의존성 주입(DI, Dependency Injection) (0) | 2024.06.29 |
[C#] as, is (0) | 2024.06.25 |
[C#] Delegate (0) | 2024.06.25 |