C# 3.0 Preview – Lambda Expression

개인적으로 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 키워드에 대해서는 개인적으로 오해를 풀었다는 이야기를 블로그에 올린적이 있다.

댓글 남기기