[C# 문법] C# Linq 지연실행
- C#/C# 문법
- 2021. 8. 10. 08:48
- 안녕하세요. 오늘은 C# 문법에서 Linq 에 대해서 설명 드리려고 합니다.
- 그 중에서도 Linq의 가장 큰 특성 중 하나인 지연실행 에 대해서 무엇인지 알아보려고 합니다.
- 다음과 같이 아래의 예제코드가 있습니다.
예제 코드
using System;
using System.Linq;
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
string[] names = { "Seoul", "New Delhi", "Bangkok", "London", "Paris", "Berlin", "Canberra" };
var query = names.Where(w => w.Length <= 5);
foreach (var item in query)
{
Console.WriteLine($"item : {item}");
}
Console.WriteLine("------------------");
names[0] = "Suwon"; // names[0]을 수정
foreach (var item in query)
{
Console.WriteLine($"item : {item}");
}
}
}
}
- 위 코드에서 주목해야 할 부분은
names[0] = 'Suwon'
대입하는 코드 부분입니다. - Where 메서드의 반환값을 query 변수에 대입한 후에 names 배열의 요소를 수정했습니다.
- foreach 반복문에서 query한 결과를 차례대로 실행시켜 보았습니다.
실행 결과
item : Seoul
item : Paris
------------------
item : Suwon
item : Paris
- 2개의 결과가 동일하게 나올거라고 생각했지만, 다르게 나왔습니다.
- 만인 Where 메서드를 호출했을 때 검색 처리가 동작하고 그 결과가 query에 저장됐다면 그 후에 names에 있는 요소를 수정해도 query에서 얻는 결과는 이전과 같을 것입니다.
- 그러나 결과가 달라졌습니다.
- 위의 결과를 보고 알 수 있는 사실은 query 변수에는 검색된 결과가 대입되는 것이 아니라는 것입니다.
- Where 메서드가 호출돼도 검색은 해당 시점에서 실행되지 않고 실제 값이 필요할 때 쿼리가 실행된다는 점입니다.
- 이를 지연실행 이라고 합니다. 지연실행 이 LINQ의 큰 특징입니다.
- 만약 지연실행 이 아니고, 즉시실행 을 하고 싶다면 ToArray 혹은 ToList 메서드를 사용하면 됩니다.
728x90
'C# > C# 문법' 카테고리의 다른 글
[C# 문법] C# LINQ GroupBy 이용하여 최대값 가져오기 (0) | 2021.08.13 |
---|---|
[C# 문법] C# Enum Description 사용 하기 (0) | 2021.08.13 |
[C# 문법] List<T> 클래스와 람다식 조합 (4) | 2021.08.06 |
[C# 문법] C# Linq Zip 메서드 (0) | 2021.08.04 |
[C# 문법] C# 디렉토리(Directory) 년\월\일 디렉토리 구조 삭제하기 (0) | 2021.08.03 |
이 글을 공유하기