본문 바로가기

Dev::DotNet/C#

확장 메소드(Extension Methods)

확장 메소드는 기존 Type 에 메소드를 추가할 수 있게 해준다.


예를 들어 TextBox 에 AppendText 라는 메소드가 있습니다.

TextBox 에 문자열을 추가하는 기능을 합니다.


하지만 자동으로 개행이 되는 AppendText 가 필요하다고 하면 (그냥 NewLine 을 붙여도 되겠지만....)

TextBox 를 상속받아서 AppendText 메소드를 추가해야 한다.


1
void AppendText(string textData, bool IsNewLine)
cs

그렇게 되면 상속받아서 만든 TextBox 의 인스턴스에서만 사용이 가능하며

예시처럼 컨트롤이라면 디자인에 올라간 컨트롤도 교체를 해야한다.


하지만 확장 메소드를 이용하면 쉽게 해결이 가능하다.


1
2
3
4
5
6
7
public static class TextBoxExtension
{
    public static void AppendText(this System.Windows.Controls.TextBox ctrl, string textData, bool IsNewLine)
    {
        ctrl.AppendText(textData + (IsNewLine ? Environment.NewLine : string.Empty));
    }
}
cs


이렇게 static 메소드로 첫번째 파라매터에 this 로 확장할 Type 을 매개변수로 넘겨줘서 메소드를 만들면 된다.

static 메소드지만 사용할 때는 생성한 인스턴스의 매소드 처럼 사용된다.



이렇게 기존 Type 을 손대지 않고 쉽게 새로운 메소드를 추가 할 수 있다.


분명 구현할 때 제약이나 한계가 상속받은거에 비하여 심하겠지만...그래도 심플한 기능에 대해서는 유용할 듯 하며


Linq 에서는 확장 메소드가 유용하게 쓰이고 있기 때문에(이건 나중에 다시...) 알아두면 반드시 도움이 될 것이다.



단, MSDN 에서는 


"일반적으로 반드시 필요한 경우에만 드물게 확장 메서드를 구현하는 것이 좋습니다." 


라는 문구가 있다....남발하지는 말자.




MSDN : http://msdn.microsoft.com/ko-kr/library/bb383977.aspx