개발꿈나무
[C# 교과서] 26. C# 확장 기능(1) - 확장 메서드 만들기 본문
반응형
확장 메서드 만들기
확장 메서드
- 확장 메서드(extension method)는 원본 형식을 변경하지 않고 이미 있는 형식에 추가로 기능을 덧붙일 수 있다.
- 확장 메서드는 이미 만들어져 있는 클래스 기능을 확장하고, 클래스와 구조체, 인터페이스에서 사용할 수 있다.
- 특히 봉인(sealed) 클래스는 상속이 불가능하므로 봉인 클래스에 새로운 메서드를 적용하기가 유용하다.
- 확장 메서더는 static 키워드가 붙은 클래스에 static 메서드로 만들어지며 반드시 동일한 네임스페이스를 참조해야 한다.
- 확장 메서드의 첫 번째 매개변수에 this 키워드를 지정하여 확장 메서드를 사용할 개체 형식을 선택할 수 있다.
public static void MethodName(this object obj, int i) { }
public static void MethodName(this string str, int i) { }
첫 번째 매개변수는 직접 넘겨주는 것이 아닌 정적 메서드로 호출할 개체 형식을 표현한다.
확장 메서드 특징
- 정적(static) 클래스에 정적(static) 메서드로 구현한다.
- 첫 번째 메서드 매개변수에 this 클래스를 붙인다.
- 같은 범위(scope)를 같은 네임스페이스에서 호출할 수 있다.
- 확장 메서드로 오버로드가 가능하다.
확장 메서드로 문자열 기능 확장하기
using System;
static class ExtensionFunction
{
// static 클래스안에 static 메서드의 첫번째 매개 변수에 this가 붙은 것은 확장 메서드
static string Three(this string value)
{
// 특정 문자열 뒤에 이 메서드가 호출되면 문자열 중 3개만 반환
return value.Substring(0, 3);
}
static void Main()
{
Console.WriteLine("안녕하세요.".Three()); //안녕하
}
}
static 클래스 안에 static 메서드를 만들고, 메서드의 첫 번째 매개변수에 this를 붙이면 확장 메서드가 된다.
Three() 메서드는 특정 메서드 뒤에 붙이면 해당 문자열 중 앞 세글자만 반환한다.
확장 메서드로 기존 형식에 새로운 메서드 추가하기
using System;
namespace ExtensionMethodDemo
{
// static 정적(고정) == shared(공유)
public static class MyClass
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
class ExtensionMethodDemo
{
static void Main()
{
string s = "안녕하세요? 확장 메서드... ...";
Console.WriteLine(s.Length); // [1] 문자의 개수: 20
Console.WriteLine(s.WordCount()); // [2] 단어의 개수: 3
}
}
}
문자열 변수 s에는 원래 WordCount()라는 메서드가 없지만,
같은 네임스페이스에 정의된 MyClass의 WordCount() 확장 메서드를 s 변수에서 사용할 수 있게 한 것이다.
확장 메서드를 사용하여 형식에 메서드 추가하기
using System;
public class Original { /* Empty */ }
public static class OriginalExtension
{
public static void NewMethod(this Original original)
=> Console.WriteLine("새로운 메서드 추가");
}
class ExtensionMethodNote
{
static void Main()
{
(new Original()).NewMethod(); // 확장 메서드 호출
}
}
//새로운 메서드 추가
Original 클래스는 아무 멤버도 갖지 않은 클래스이지만,
OriginalExtension 클래스에서 NewMethod()를 참조해서 새로운 메서드를 추가하여 사용할 수 있다.
<Reference>
반응형
'C# 기초' 카테고리의 다른 글
[C# 교과서] 28. C# 확장 기능(3) - 튜플 (0) | 2022.01.25 |
---|---|
[C# 교과서] 27. C# 확장 기능(2) - 동적 형식 (0) | 2022.01.25 |
[C# 교과서] 25. C# 활용(19) - 특성과 리플렉션 (0) | 2022.01.25 |
[C# 교과서] 24. C# 활용(18) - 인터페이스 (0) | 2022.01.21 |
[C# 교과서] 23. C# 활용(17) - 메서드 오버라이드 (0) | 2022.01.20 |
Comments