LINQ의 정체(정의)는?

LINQ를 라이브러리로 생각하고 있다가 조금 더 정확한 정의가 있어야하지 않을까하는 생각에 LINQ와 관련해서 온 메일들과 문서들을 다시 살펴봤습니다. LINQ Project Overview 문서를 보면 제일 첫장에 다음과 같이 설명하고 있습니다.

Rather than add relational or XML-specific features to our programming languages and runtime, with the LINQ project we have taken a more general approach and are adding general purpose query facilities to the .NET Framework that apply to all sources of information, not just relational or XML data. This facility is called .NET Language Integrated Query (LINQ).

.NET Framework에(정확히는 .NET Framework의 언어들이) 다양한 정보의 소스로부터 쿼리를 할 수 있도록 마련한 수단(Facility)이라는 조금은 맹한 정의를 생각하면 라이브러리라고 제한하는 것은 틀렸었네요. 사실 LINQ는 프로젝트의 코드명이기도 합니다. 나중에 이름이 바뀔 수 있다는 의미로 받아들였었는데, 사실은 수단 자체의 이름이기 때문에 이름을 굳이 바꿀 필요가 없다는 생각도 듭니다. 한 메일에서 그 수단들을 분류해놓은 것을 인용해봅니다:

  • C# 3.0 언어 확장(Language Extensions)
  • 시퀀스에 사용되는 표준 쿼리 연산자(Standard Query Operators for Sequences)
  • Expression Tree
  • DLinq
  • XLinq

이것들을 합친 것이 현재 LINQ의 정확한 정체입니다. 정리하고보니 간단하네요.