[C#] 확장메서드 (Extension Method)
간혹 프로그램을 작성하다 보면 특정 클래스에 메서드를 추가하고 싶은 경우가 있다. 그게 내가 만든 클래스라면 직접 파일을 열어서 추가하면 되지만 외부 라이브러리를 사용할 시 직접 수정하지 못하게 막아놓은 경우도 있을 것이다.
그럴 경우에 사용하면 되는 것이 확장메서드이다.확장메서드를 사용할 시 클래스 내부가 아닌 외부에서 메서드를 정의함으로서 기존 형식의 코드변경 없이 외부에서 대상 형식에 메서드를 추가할 수 있다.
확장메서드 만들기
확장메서드는 static
클래스 안에서 static
메서드로 정의된다.
public static class ExtensionMethod {
public static void TestExtensionMethod1(this string a) {
Console.WriteLine(TestExtensionMethod1);
}
public static void TestExtensionMethod2(this string a, int num) {
Console.WriteLine(TestExtensionMethod2 + num);
}
public static void TestExtensionMethod3(this string a, int num, string str) {
Console.WriteLine(TestExtensionMethod3 + num + + str);
}
}
위 예제는 string
클래스의 확장 메서드이다.
확장메서드는 첫번 째 파라미터에서 확장메서드의 타입을 정해주는데 타입 앞에 this를 붙여서 확장메서드를 만들 수 있다. 그리고 두번 째 파라미터 부터는 확장메서드에 쓰일 파라미터를 적을 수 있다.
결과
static void Main(string[] args) {
string test = a;
test.TestExtensionMethod1(); TestExtensionMethod1
test.TestExtensionMethod2(50); TestExtensionMethod2 50
test.TestExtensionMethod3(100, Method3); TestExtensionMethod3 100 Method3
}
직접 작성한 확장메서드를 이용해보면 오른쪽 주석과 같은 결과가 나온다.
Linq
확장메서드는 Linq에서 굉장히 많이 사용되는 편이다.
아래는 그 예시들이다.
string[] people = new string[] { Tom, Jerry, Tomas, Kay, Camel };
IEnumerable enumerable = people.Where(peo = peo.Length 3);
IEnumerator enumerator = enumerable.GetEnumerator();
while (enumerator.MoveNext()) {
string name = (string)enumerator.Current;
Console.WriteLine(name); Jerry Tomas Camel
}
string[] people = new string[] { Tom, Jerry, Tomas, Kay, Camel };
Liststring name = people.Select(peo = peo.Substring(0, 3)).ToList();
for(int i = 0;i name.Count; i++) {
Console.WriteLine(name[i]); Tom Jer Tom Kay Cam
}
확장메서드는 너무 남용하면 좋지않기에 주의하며 사용하자.
댓글남기기