728x90
안녕하세요!
이번 글에서는 C#의 확장 메서드에 대해 알아보겠습니다.
1. 확장 메서드의 개념
확장 메서드는 기존의 클래스에 새로운 메서드를 마치 그 클래스에 이미 정의된 것처럼 추가할 수 있는 기능입니다.
이를 통해 우리는 .NET 프레임워크에 있는 기본 클래스에도 우리만의 메서드를 추가할 수 있습니다.
2. 확장 메서드의 구조
확장 메서드는 다음과 같은 구조를 가지고 있습니다.
public static returnType MethodName(this ExtendedType parameter)
{
// 메서드의 구현
}
- returnType : 메서드가 반환하는 값의 타입입니다.
- MethodName : 우리가 추가하는 메서드의 이름입니다.
- ExtendedType : 메서드를 추가하려는 클래스의 타입입니다.
- parameter : 메서드에 전달되는 매개변수입니다.
3. 확장 메서드 사용 예제
아래는 정수형 리스트에서 짝수만 골라내는 확장 메서드의 예제입니다.
public static class MyExtensions
{
public static List<int> GetEvenNumbers(this List<int> numbers)
{
return numbers.Where(n => n % 2 == 0).ToList();
}
}
// 사용 예제
List<int> myNumbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evenNumbers = myNumbers.GetEvenNumbers();
4. 충돌
가장 흔한 충돌은 확장 메서드와 인스턴스 메서드가 같은 이름을 가질 때 발생합니다.
예를 들어, 우리가 Print라는 메서드를 가진 클래스를 가지고 있는데 확장 매서드로 똑같은 이름을 가진 매서드를 만들었다고 가정해 보겠습니다.
public class MyClass
{
public void Print()
{
Console.WriteLine("인스턴스 메서드의 Print");
}
}
public static class MyExtensions
{
public static void Print(this MyClass instance)
{
Console.WriteLine("확장 메서드의 Print");
}
}
인스턴스 매서드 우선호출
Print() 매서드를 호출하면 인스턴스 매서드가 호출이 되게 됩니다.
인스턴스 매서드가 확장 매서드보다 우선순위를 가지므로, 인스턴스가 있는경우, 인스턴스 매서드가 호출이 됩니다.
MyClass myObject = new MyClass();
myObject.Print(); // 결과: "인스턴스 메서드의 Print"
확장 매서드 강제호출
만약 확장 메서드를 호출하고 싶다면, 형변환을 통해 강제로 호출할 수 있습니다.
MyClass myObject = new MyClass();
((MyClassExtensions)myObject).Print(); // 결과: "확장 메서드의 Print"
5. 확장 메서드의 장점
- 가독성 향상 : 코드가 간결해지고, 클래스에 새로운 기능을 쉽게 추가할 수 있어 가독성이 향상됩니다.
- 유지 보수 용이성 : 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있어 유지 보수가 쉬워집니다.
- 코드 재사용 : 여러 프로젝트에서 동일한 기능을 활용할 수 있습니다.
6. 주의사항
- 확장 메서드는 정적 클래스 안에 선언되어야 합니다.
- 첫 번째 매개변수는 반드시 this 키워드와 함께 기존 타입이어야 합니다.
이번 글에서는 C#의 확장 메서드에 대해 기본 개념과 사용 예제, 인스턴스 메서드가 같은 이름일 때 발생할 수 있는 충돌에 대해 알아보았습니다.
확장 메서드는 코드의 가독성과 재사용성을 높이는데 큰 도움이 됩니다.
감사합니다.
728x90
'[C#] > 프로그래밍 기초' 카테고리의 다른 글
[C#] 프로그래밍 기초 : 가변길이 매개변수 (3) | 2023.12.11 |
---|---|
[C#] 프로그래밍 기초 : 람다식(=>) (18) | 2023.09.07 |
[C#] 프로그래밍 기초 : 로깅(Logging) (35) | 2023.08.08 |
[C#] 프로그래밍 기초 : Call by value & Call by reference (29) | 2023.08.02 |
[C#] 프로그래밍 기초 : foreach (20) | 2023.08.01 |