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 | 31 |
Tags
- 우분투
- linux
- Expanding Polytope Algorithm
- Unity
- ubuntu
- C
- Vector
- SOH
- 유니티
- 다이나믹 프로그래밍
- PS
- 리눅스
- 분할축 이론
- 충돌 알고리즘
- 백준
- 벡터
- 내적
- 문제풀이
- 외적
- AABB
- Graham Scan
- dp
- 수학
- C++
- GJK
- 보로노이다이어그램
- c#
- Doubly Connected Edge List
- 알고리즘
- uclidean algorithm
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 |