[C#] 지연된 실행
지연된 실행은 실현된 값이 실제로 필요할 때 가지 식의 계산이 지연되는 것을 의미한다.
이는 C#에서 지연실행은 LINQ나 yield 구문을 통해서 구현할 수 있으며, LINQ 구문이 요청 받은 시점에 이루어진다.
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
// 데이터 소스 생성
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
int mu = 2;
// LINQ 쿼리 선언 (지연된 실행)
var query = from num in numbers
select num * mu;
mu = 3;
// 결과를 요청하기 전까지는 쿼리가 실행되지 않음
// 결과를 요청하여 실행
foreach (var result in query)
{
Console.WriteLine(result);
}
// 결과 : 3 6 9 12 15
}
}
위 코드에선 LINQ 쿼리 선언 부분이 실행되기 전까진 foreach 문이 동작하지 않는다.
mu 변수를 초기화 한 부분과 mu 변수를 3으로 재할당한 부분을 보면 일반적으로는 numbers 리스트에 2가 곱해져서 결과가 나타나겠지만 결과는 3이 곱해진 상태로 나타난다. 이는 지연 실행의 특징이며, 쿼리가 실행되는 시점에 mu의 값이 사용되었기 때문이다.
// 추가로 ToArray() 함수같은 경우, 사용하게 되면 즉시 실행되어 값이 바로 반영되어 진다.
(결과는 3이 곱해진게 아닌 2로 곱해져서 나타난다.)
var query = numbers .Select(num => num * mu) .ToArray(); // 즉시 실행하여 배열로 변환
참고 사이트
https://serendip.notion.site/C-LINQ-Deferred-execution-737dc0d7a22440a69e8aad8eb6af7115
C# - LINQ 지연 실행(Deferred execution) | Notion
지연 실행(Deferred execution)이란 LINQ 구문이 코드가 작성된 위치가 아닌 요청 받은 시점에 이루어 지는 것을 의미 합니다. 아래 예제를 보시죠.
serendip.notion.site
https://learn.microsoft.com/ko-kr/dotnet/standard/linq/deferred-execution-lazy-evaluation
지연 실행 및 지연 계산 - LINQ to XML - .NET
지연 실행의 이점 및 요구 사항과 쿼리 및 축 작업을 사용하여 구현하는 방법을 알아봅니다.
learn.microsoft.com