웹 개발 메모장

[C#] 확장메소드 란? 본문

옛날../C#

[C#] 확장메소드 란?

도로롱주 2017. 10. 20. 16:35




확장메소드



예를 들어서 문자열에 특정 문자가 몇 개가 있는지 count해주는 메소드를 만들어봅시다.



우선 일반적인 메소드 사용방법입니다.


메소드를 가질 Class 를 생성해서 클래스 내에 메소드를 코딩해줍니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MyString
{
    public static int getCharCount(string str, char ch)
    {
        int sum = 0;
        foreach(char c in str){
            if (c == ch)
            {
                sum++;
            }
        }
        return sum;
    }
}
//cs


호출하는 방법입니다.

1
2
string str = "abcaabccc";
int cnt = MyString.getCharCount(str, 'a');
cs




위의 메소드를 확장 메소드로 바꾸는 방법은 아주아주 간단합니다.

클래스를 static으로 선언해주고 원하는 매개변수 앞에 this 를 추가합니다.


1
2
3
4
5
6
7
public static class MyString
{
    public static int getCharCount(this string str, char ch)
    {
        //위 코드와 동일
    }
}
cs


호출하는 방법입니다. 결과는 같습니다.

1
2
string str = "abcaabccc";
int cnt = str.getCharCount('a');
cs




호출하는 코드만 놓고 비교해보겠습니다.

1
2
3
4
5
//일반적인 메소드 호출코드
MyString.getCharCount(str, 'a');
 
//확장 메소드 호출코드
str.getCharCount('a');
cs


getCharCount() 가 마치 string 의 메소드인 것처럼 사용할 수 있습니다.

이처럼 이미 존재하는 클래스나 변수 등에 메소드를 추가하는 듯한 효과가 있습니다.




'굳이 이걸 왜써...' 가 아니라 필요한 곳들이 있습니다.

예를 들어, HTML 헬퍼에서는 특정 뷰에서만 사용하는 것이 아니라면 재사용성 대문에 확장 메소드를 이용해 사용자 HTML 헬퍼를 만드는 방법이 보편적입니다.



Comments