C# 3.0 Preview – LINQ

C# 3.0이 닷넷 프레임워크 3.5와 함께 배포되기로 함에 따라 역시 가장 많은 주목을 받고 있는 부분이 있다면 그것은 아마도 LINQ와 Lambda Expression일 것이다.

현재까지 살펴본 바로는 LINQ는 데이터 액세스에 상당하 초점이 맞추어져있었다. 또한 LINQ는 Boxing과 Unboxing으로 인하여 지출되는 성능 상의 비용을 없애기 위하여 C# 2.0의 Generic을 고도로 활용하는 모습을 보여주는데 다음의 코드가 그러하다.

public static IEnumerable<Employee> PopulateRandomInfo(int nCount)
        {
            Random oRandom = new Random();


            for (int i = 0; i < nCount; i++)
                yield return new Employee(“Test” + i.ToString(), (float)oRandom.NextDouble() * 100);
        }

IEnumerable<Employee> query = from x in Employee.PopulateRandomInfo(128)
                        where x.EmployeeSalary > 50.0f
                        where x.EmployeeName.StartsWith(“Test”)
                        orderby x.EmployeeSalary descending
                        orderby x.EmployeeName ascending
                        select x;

Employee 클래스의 정적 메서드인 PopulateRandomInfo 메서드는 C# 2.0의 yield return을 사용하여 언어 수준에서 컬렉션을 만들어서 반환하는 것을 볼 수 있다. 그리고 이렇게 만들어진 컬렉션을 LINQ에서는 바로 활용할 수 있다.

LINQ의 대략적인 구조를 보면 그리 낯설지 않은 모습임을 알 수 있는데 FROM ~ WHERE ~ SELECT 순으로 끝나는 구조이다. 어떤 필드를 조회할 것인지를 먼저 선택해야하는 SQL과는 달리 LINQ에서는 어떤 데이터 소스를 사용할 것인지를 (from) 묻는 것이 더 우선순위가 높다. 그리고 그 데이터 소스로부터 조건을 두고 (where), 데이터를 정렬하거나 (order by), 데이터를 그룹화한 상태로 (group ~ by) 원하는 데이터를 가져오는 (select) 형태이다.

from 절이 의미하는 바를 생각해보면 foreach와 꽤 유사하다. x라고 하는 미리 가정된 변수와 이 변수의 제한 범위를 설정하는 것이 꼭 foreach와 모양새가 비슷하다. 그리고 뒤이어 나타나는 where, orderby, select 등의 구절은 from에서 정한 변수 x를 기준으로 서술되는 것이다. 또한 from 절에서 지정할 수 있는 데이터 소스는 foreach 구문에서와 마찬가지로 “나열될 수 있는” 데이터 소스여야 한다.

현재 버전에서, LINQ 질의문 자체는 함수처럼 담아지는 항목이 아닌 즉시 실행되는 문장 (Statement)으로 취급되고 있고 단지 우리는 LINQ 질의문의 수행 결과를 IEnumerable<T> 인터페이스 형식으로 받아볼 수 있는 것일 뿐이다.

LINQ는 이와 같이 사용함으로서 우리가 일상적으로 사용하는 데이터 프레젠테이션 관련 작업을 너무나도 간단하게 풀어내고 있다. 또한 LINQ 역시 질의문의 구조를 취하고 있기 때문에 프로그래밍 코드로 다 풀어내기 어려운 복잡한 정렬 조건 설정도 처리하기가 매우 용이하다.

LINQ에 이어서 주목을 받고 있는 또 다른 C# 3.0의 언어적 확장 기능인 람다 표현식을 다음번에는 살펴보기로 할까 한다.

C# 3.0 Preview – LINQ”에 대한 2개의 생각

    • yield는 2.0때 나온거라. ㅎㅎ

      C# 3.0 언어 사양이 그 전에 나왔던것들보다 굉장히 파격적인게 많은데 파이썬의 영향을 많이 받은것처럼 보여. 대표적인게 람다 표현식이지. ㅎ

댓글 남기기