'C# 3.0'에 해당되는 글 1건

  1. 2010.08.05 Delegate 를 축약해서 쓸 수 있는 여러가지 방법들
C# 3.0 에서 새롭게 도입된 Lambda 표현식을 사용하면 코드를 정말 간단하게 표시할 수 있는 장점이 있습니다. 델리게이트가 세상에 처음 나타난 이래 이는 정말 많은 프로그램과 개발자들에게 형언할 수 없는 아름다운 생활을 할 수 있는 "기회"를 주었습니다. 물론... 기회에는 반대급부가 따랐지만 말이죠.. 쿨럭... 여튼... 아래의 간단한 세가지 코드를 보면서 코드가 아름다워지는 광경을 한번 보도록 하겠습니다.

Named 메서드의 사용
IEnumerable<string> filteredList = cities.Where(StartsWithL);

public bool StartsWithL(string name)
{
    return name.StartsWith("L");
}

자주 보시던 스타일의 코드입니다. cities 어레이에 들어 있는 값들 중 L 로 시작하는 값을 얻어오는 코드지요. string 클래스의 확장 메서드인 Where 의 도움을 받아 StartsWithL 메서드가 Where 절의 역할을 하고 있습니다.

익명 Delegate의 사용

별도로 메서드를 만들어서 호출하는 것도 나쁘지 않습니다만 이왕이면 코드를 간결하게 유지하기 위해 익명 Delegate를 많이들 사용하실 겁니다. Named 메서드 사용하던걸 익명 Delegate 로 바꿔보겠습니다.

IEnumerable<string> filteredList = cities.Where(
            delegate(string s)
            {
                return s.StartsWith("L");
            }
일단 메서드가 하나 줄어서 기분이 좋습니다 ^^; 익명 Delegate 를 이용해서 위처럼 간단하게 inline 으로 처리를 할 수 있습니다. 그런데 코드가 지저분한 것이 별로 보기가 좋지 않습니다. 이를 람다 표현식으로 바꾸어 보도록 하겠습니다

Lambda 표현식의 사용

IEnumerable<string> filteredList = cities.Where(s => s.StartsWith("L"));
아주 깔끔하게 한줄러 코드를 줄였습니다. 닷넷이 제공하는 컴파일러는 생각보다 똑똑해서 s 라는 변수가 당연히 cities의 타입을 따라간다는 것을 알고 있습니다. 인텔리센스도 실시간으로 당연히 잘 동작하겠지요.

- NoPD -
신고
Posted by 노피디

티스토리 툴바