옛날../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 헬퍼를 만드는 방법이 보편적입니다.