1 분 소요

간혹 프로그램을 작성하다 보면 특정 클래스에 메서드를 추가하고 싶은 경우가 있다. 그게 내가 만든 클래스라면 직접 파일을 열어서 추가하면 되지만 외부 라이브러리를 사용할 시 직접 수정하지 못하게 막아놓은 경우도 있을 것이다.

그럴 경우에 사용하면 되는 것이 확장메서드이다.확장메서드를 사용할 시 클래스 내부가 아닌 외부에서 메서드를 정의함으로서 기존 형식의 코드변경 없이 외부에서 대상 형식에 메서드를 추가할 수 있다.

확장메서드 만들기

확장메서드는 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
	}

확장메서드는 너무 남용하면 좋지않기에 주의하며 사용하자.

댓글남기기