실행 방식에 따라 표준 쿼리 연산자 분류
표준 쿼리 연산자 메서드의 LINQ to Objects 구현은 즉시 실행과 지연된 실행이라는 두 가지 기본 방식 중 하나로 실행됩니다.지연된 실행을 사용하는 쿼리 연산자는 계속해서 스트리밍 방식과 비스트리밍 방식으로 분류할 수 있습니다. 쿼리 연산자 실행 방식의 차이점을 알면 특정 쿼리에서 얻을 수 있는 결과를 이해하는 데 도움이 됩니다.특히 데이터 소스가 변경되거나 다른 쿼리에 기반하는 쿼리를 작성하는 경우 쿼리 연산자의 실행 방식을 아는 것이 중요합니다.이 항목에서는 실행 방식에 따라 표준 쿼리 연산자를 분류합니다.
실행 방식
즉시 실행
즉시 실행은 쿼리가 선언된 코드 위치에서 데이터 소스를 읽고 작업이 수행된다는 의미입니다.열거할 수 없는 단일 결과를 반환하는 모든 표준 쿼리 연산자는 즉시 실행됩니다.
연기됨
지연된 실행은 쿼리가 선언된 코드 위치에서 작업이 수행되지 않는다는 의미입니다.foreach(Visual Basic의 경우 For Each) 문을 사용하는 경우와 같이 쿼리 변수가 열거될 경우에만 작업이 수행됩니다.즉, 쿼리가 정의된 시점이 아니라 쿼리가 실행되는 시점의 데이터 소스 내용에 따라 쿼리 실행 결과를 얻을 수 있습니다.쿼리 변수를 여러 번 열거할 수 있는 경우 그 때마다 결과가 다를 수 있습니다. 반환 형식이 IEnumerable<T>이거나 IOrderedEnumerable<TElement>인 표준 쿼리 연산자는 거의 모두 지연된 실행 방식으로 실행됩니다.
지연된 실행을 사용하는 쿼리 연산자는 계속해서 스트리밍 방식과 비스트리밍 방식으로 분류할 수 있습니다.
스트리밍
스트리밍 연산자는 요소를 생성하기 전에 모든 소스 데이터를 읽을 필요가 없습니다.실행 시 스트리밍 연산자는 각 소스 요소를 읽고 그에 대한 작업을 수행한 후 적합한 경우 요소를 생성합니다.그렇지 않으면 결과 요소를 생성할 수 있을 때까지 계속 소스 요소를 읽습니다.즉, 단일 결과 요소를 생성하기 위해 둘 이상의 소스 요소를 읽을 수 있습니다.
비스트리밍
비스트리밍 연산자는 결과 요소를 생성하기 위해 모든 소스 데이터를 읽어야 합니다.정렬이나 그룹화 같은 작업이 이 범주에 속합니다.실행 시 비스트리밍 쿼리 연산자는 모든 소스 데이터를 읽고 이를 데이터 구조로 만든 다음 작업을 수행하여 결과 요소를 생성합니다.
분류 표
다음 표에서는 실행 방식에 따라 각 표준 쿼리 연산자 메서드를 분류합니다.
[!참고]
한 연산자가 두 열에 나타나는 경우 작업에 2개의 입력 시퀀스가 포함되며 각 시퀀스는 서로 다르게 계산됩니다.이러한 경우 매개 변수 목록에서 첫 번째 시퀀스는 항상 지연된 스트리밍 방식으로 계산됩니다.
표준 쿼리 연산자 |
반환 형식 |
즉시 실행 |
지연된 스트리밍 실행 |
지연된 비스트리밍 실행 |
---|---|---|---|---|
TSource |
X |
|
|
|
X |
|
|
||
X |
|
|
||
|
X |
|
||
단일 숫자 값 |
X |
|
|
|
|
X |
|
||
|
X |
|
||
X |
|
|
||
X |
|
|
||
|
X |
|
||
|
X |
|
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
X |
|
|
||
|
X |
X |
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
|
|
X |
||
|
X |
X |
||
|
X |
X |
||
|
X |
X |
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
X |
|
|
||
단일 숫자 값, TSource 또는 TResult |
X |
|
|
|
단일 숫자 값, TSource 또는 TResult |
X |
|
|
|
|
X |
|
||
|
|
X |
||
|
|
X |
||
|
X |
|
||
|
X |
|
||
|
|
X |
||
|
X |
|
||
|
X |
|
||
X |
|
|
||
TSource |
X |
|
|
|
TSource |
X |
|
|
|
|
X |
|
||
|
X |
|
||
단일 숫자 값 |
X |
|
|
|
|
X |
|
||
|
X |
|
||
|
|
X |
||
|
|
X |
||
TSource 배열 |
X |
|
|
|
X |
|
|
||
X |
|
|
||
X |
|
|
||
|
X |
|
||
|
X |
|