개발/C#

[C#] 지연된 실행

남생이야 2024. 4. 17. 01:13

지연된 실행은 실현된 값이 실제로 필요할 때 가지 식의 계산이 지연되는 것을 의미한다.

이는 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