'확장메서드'에 해당되는 글 1건

  1. 2009.03.19 확장 메서드(Extension Method)
.NET2009. 3. 19. 18:07

C# 3.0이 제공하는 새로운 기술이 참 많은데 그 중 가장 많이 거론 되는 내용이 LINQ기술일 것이다. 하지만 LINQ보다 도 코딩 시 더 유용한 기술이 있어 소개해보려 합니다.

Extension Method

구글에서 “Extension Method” 이라고 검색해보면 꽤나 많은 글들이 올라오고 사용방법에 대해서 자세히 설명하고 있으니 관련 글을 찾아봐도 되겠지만 간략히 이해 하고 싶은 분들은 아래 글을 참고해주세요. 제가 쓰는 글보다는 구글에 올라온 글이 백번 낫겠지만^^;

Extension Method
는 말 그대로 메서드를 확장해서 사용하는 기술입니다. 예제를 보면서 설명 하도록 하겠습니다.

public static class EMClass
{
    public static int ToInt32Ext(this string s)
    {
        return Int32.Parse(s);
    }
    public static int ToInt32Static(string s)
    {
        return Int32.Parse(s);
    }
}
class Program
{
    static void Main(string[] args)
    {
        string s = "9";
        int i = s.ToInt32Ext();              // 확장 메서드
        int j = EMClass.ToInt32Static(s);    // 일반 적으로 사용하는 방법

    }
}


소개하려는 메서드는 문자를 숫자로 바꿔주는 소스입니다
. 함수를 바로 사용하기 위해서 static을 많이 사용합니다. 그리고 위의 소스처럼 함수 인자에 뭔가를 넣겠죠.

int j = EMClass.ToInt32Static(s);    // 일반 적으로 사용하는 방법

이렇게 말입니다.

 

일단 static을 사용했으니 인스턴스 객체를 만들지 않고 바로 메서드를 사용할 수 있으니 간단하죠. 그런데 그 아래 확장 메서드라는 라인을 보면 string 클래스에 ToInt32Ext()메서드가 있는것처럼 바로 접근해서 사용하는 것을 볼 수 있습니다. 최소한 가독성이나 사용 면에서는 확장 메서드가 사용상 용이해 보입니다.

딱히 필요성을 모르겠다는 분들을 위해 다른 소스를 예제로 보여드리겠습니다.

우선 오늘 날짜에서 특정 일을 빼주는 함수를 만든다고 가정 하겠습니다.

그럼 보통 이런 함수를 구상 하시리라 예상됩니다.

 

public static DateTime MinusDay(DateTime dt, int days)

{

DateTime d = dt.AddDays(-days);

return d;

}

 

날짜 파라메터, 지정 날짜 파라메터 그리고 아래 처럼 사용할 것입니다.

 

DateTime current = DateTime.Now;

DateTime dt1 = DateTimerHelper.MinusDay(current, 3);

 

하지만 확장 메서드를 사용하면 마치 DateTime MinusDay라는 메서드가 있는 것 처럼 사용할 수 있습니다.

 

public static DateTime EX_MinusDay(this DateTime dt, int days)

{

    DateTime d = dt.AddDays(-days);

    return d;

}
 

DateTime dt2 = current.EX_MinusDay(3);

소스입니다.
 

public static class DateTimerHelper
{
    public static DateTime MinusDay(DateTime dt, int days)
    {
        DateTime d = dt.AddDays(-days);
        return d;
    }

    public static DateTime EX_MinusDay(this DateTime dt, int days)
    {
        DateTime d = dt.AddDays(-days);
        return d;
    }
}
class Program
{
    static void Main(string[] args)
    {
        DateTime current = DateTime.Now;
        DateTime dt1 = DateTimerHelper.MinusDay(current, 3);    //일반적으로 사용하는 방법

        DateTime dt2 = current.EX_MinusDay(3);    //확장 메서드를 사용하는 방법           
    }
}


확장 메서드(Extension Method)를 사용하기 위해서는 몇가지 조건이 필요합니다. 확장 메서드는 static class에 static method로 선언 하여, instance메소드를 호출 하듯이 사용하면 됩니다.



 

Posted by Jake Kim