개인적으로 C# 3.0이 파이썬의 영향을 많이 받았다고 생각되는 부분이 바로 이 부분이다. 파이썬에도 Lambda Expression이 존재하고 있고 용법이 너무나 유사하기 때문이다.

Lambda Expression은 C# 2.0에서 도입되었던 Anonymous Delegate (익명 대리자)를 좀 더 실용적이고 쓰기 쉽게 많든 것으로 Lambda Expression은 컴파일 과정에서 대리자로 치환된다. Lambda Expression의 용법은 다음과 같다.

(매개 변수 리스트) => (인라인 표현식)

매개 변수 리스트에는 매개 변수가 하나도 없을 수도 있고 여러 개의 매개 변수가 올 수도 있다.

Predicate<int> oTest = x => x % 2 == 0;
Console.WriteLine(oTest(2).ToString());
Console.WriteLine(oTest(3).ToString());

홀수와 짝수를 판정하는 지극히 일반적인 작업을 Lambda Expression으로 만든 것이다. 이전의 익명 대리자에 비해 훨씬 간단하고 알아보기 쉬운것은 물론 수학 공식같은 표기법이므로 상당히 친숙하다. Lambda Expression이 대리자 안에 담길 수 있다는 것을 보이기 위하여 닷넷 프레임워크 2.0부터 제공되는 기본 대리자 형식인 Predicate를 사용하여 Lambda Expression을 담았다. 왜 담길 수 있었는지를 따져보기 위하여 디스어셈블해보면 예상했던 그대로 익명 대리자를 사용한 것을 알 수 있다.

익명 대리자는 한 줄이 넘는 프로그램 코드를 담을 수 있었기 때문에 확장성은 좋지만 과연 실용적인가에 대한 의문이 많았다. 하지만 Lambda Expression은 참으로 알차다고 본다. 내부적으로 익명 대리자로 치환되기 때문에 (그것도 다소 큰 분량의 코드로서) 코드 크기에 민감한 상황에서는 적절하지 않은 선택일 수 있지만 일반적인 목적 달성을 위해서라면 그렇게까지 심각하게 따져야 할 이유가 없을 것이다.

C# 3.0은 대체로 C# 2.0의 기능을 내부적으로 다시 사용하고 있으며 언어적인 차원에서만 업그레이드한 성격이 강하다. C# 3.0의 문법이 낯설다면 C# 2.0에서 추가한 기능이 C# 3.0에서 어떻게 반영될지 심층적으로 살펴볼 본 아티클 시리즈들을 통하여 친해져보면 좋지 않을까 싶다.

다음 아티클에서는 C# 3.0에서 가장 논란(?)이 되었던 var 키워드의 실체를 보기로 한다. var 키워드에 대해서는 개인적으로 오해를 풀었다는 이야기를 블로그에 올린적이 있다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)