Googling 을 하다가 난감한 용법을 만나게 되었다.


    void Foo( this MyClass arg );


대체 method 의 parameter 에 this qualifier 를 붙이는 것이 무슨 의미일까 고민하다가, 결국에는 다시 googling 을 했다.

어떤 고마우신 분이 이 주제에 대해서 blogging 을 했고, 이를 Extension Methods 라고 부른다는 것을 알게 되었다.


아래쪽의 예제를 보면 이것이 얼마나 강력한 기능인가를 알 수 있으며, .NET 언어들이 가지는 확장성에 놀라게 된다.


New "Orcas" Language Feature : Extension Methods.


자세한 내용은 위의 링크를 참조하기 바란다. 여기에서는 일부분만 번역하고 요약하도록 하겠다.




Extension Method 란?


Extension method 는 개발자가 현재 존재하는 CLR type 의 public contract 에 새로운 method 를 추가할 수 있도록 해 주는데, 이 때 그것을 sub-classing 하거나 원래 type 을 recompile 할 필요가 없다. Extension method 는 오늘날의 동적 언어들에서 유명하게 지원하는 "duck typing" 의 유연성을 strongly-typed language 의 성능 및 compile-time 유효화와 합쳐질 수 있도록 한다.

Extension Method 는 여러 가지 유용한 시나리오를 가능하게 하며, "Orcas" 릴리즈의 일부로 .NET 과 함께 소개된 LINQ query framework 를 정말 강력하게 만드는데 도움을 준다.


예제


String 변수가 유효한 이메일 주소인지를 확인하고자 한다고 하자. 당신은 아마도 ( static method 를 가진 ) 서로 다른 클래스를 구현하게 될 것이다.


    string email = Request.QueryString["email"];
    if ( EmailValidator.IsValid(email) ){   }


새로운 "extension method"를 사용하면, 유용한 "IsValidEmailAddress()" method 를 String 클래스 자체에 추가할 수 있다. 그리고 코드를 다음과 같이 작성할 수 있다.


    string email = Request.QueryString["email"];
    if ( email.IsValidEmailAddress() ){   }


새로운 IsValidEmailAddress() method 를 현존하는 String type 에 어떻게 추가할까? 우리는 static method 를 포함하는 static class 를 다음과 같이 정의한다.


    public static class ScottGuExtensions
    {
        public static bool IsValidEmailAddress(this string s)
        {
            Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
            return regex.IsMatch(s);
        }
    }


'Programming > .NET' 카테고리의 다른 글

[ 4 ] DataBinding  (0) 2012.10.14
[ 3 ] Dependency property.  (0) 2012.10.11
[ 2 ] XAML  (0) 2012.10.10
[ 1 ] WPF Architecture.  (0) 2012.10.08
[ 6 ] Proerty, indexer, attribute  (0) 2012.10.05
[ 5 ] Delegate and event.  (0) 2012.10.02
[ 4 ] Classes and structs  (0) 2012.09.27
[ 3 ] .NET Garbage Collection.  (0) 2012.09.25
[ 2 ] C# Types  (0) 2012.09.25
[ 1 ] .NET Framework 4.0 소개.  (0) 2012.09.20

+ Recent posts