Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Expanding Polytope Algorithm
- ubuntu
- 충돌 알고리즘
- 수학
- dp
- 리눅스
- 분할축 이론
- 알고리즘
- SOH
- C
- c#
- 보로노이다이어그램
- AABB
- 문제풀이
- Doubly Connected Edge List
- Graham Scan
- 외적
- uclidean algorithm
- 벡터
- linux
- Unity
- C++
- 내적
- 유니티
- PS
- 백준
- 다이나믹 프로그래밍
- Vector
- 우분투
- GJK
Archives
- Today
- Total
마이 플밍 블로그
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" };
List<string> 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
}
확장메서드는 너무 남용하면 좋지않기에 주의하며 사용하자.
'Code > C#' 카테고리의 다른 글
[C#] GC(Garbage Collector)의 작동원리 (0) | 2022.04.03 |
---|---|
Regular Expression (0) | 2021.09.27 |