웹 개발 메모장
[C#] 확장메소드 란? 본문
확장메소드
예를 들어서 문자열에 특정 문자가 몇 개가 있는지 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 헬퍼를 만드는 방법이 보편적입니다.
'옛날.. > C#' 카테고리의 다른 글
[C#] cs 페이지에서 자바스크립트 코드 작성 방법 (0) | 2017.11.08 |
---|---|
[C#] 잘못된 다시 게시 또는 콜백 인수입니다. 원인 및 해결 (0) | 2017.10.26 |
[C#] C# 코드에서 @ 골뱅이 란? (0) | 2017.10.20 |
[C#] 예외처리 란? (0) | 2017.10.20 |
[C#] 이니셜라이저 란? (0) | 2017.10.13 |
Comments