[C# 문법] C# Linq 지연실행

  • 안녕하세요. 오늘은 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

이 글을 공유하기

댓글

Designed by JB FACTORY