확장 메서드(Extension Methods)란?
개발을 하다보면 기존 클래스의 기능을 추가하고 싶은데 클래스 상속이 막혀 있거나 기능을 추가하기 어려운 경우가 존재한다. 이럴 때 확장 메서드를 사용하면 편하게 기능을 추가할 수 있다.
확장 메서드의 특징
- 정적 클래스와 정적 메서드로 선언
- 확장하려는 클래스의 인스턴스를 첫 번째 매개변수로 받으며, this 키워드를 사용
- 네임스페이스를 통해 확장 메서드를 사용 가능
확장 메서드의 기본 문법
public static class MyExtensions
{
public static int WordCount(this string str)
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
- MyExtensions: 확장 메서드를 정의할 정적 클래스
- this string str: 확장하고자 하는 클래스(여기서는 string)의 인스턴스를 의미
위 예제에서 WordCount 확장 메서드는 string 타입에 대해 단어 개수를 계산하는 기능을 제공, this를 통해서 확장 해주는게 핵심
확장 메서드 주의사항
- 확장 메서드를 사용하기 위해선 해당 메서드를 정의한 네임스페이스를 반드시 포함해야 함
- 메서드 충돌에 주의하세요. 동일한 확장 메서드가 여러 곳에 정의되면 컴파일러가 혼동할 수 있다.
- 메서드 우선순위: 확장 메서드보다 클래스의 인스턴스 메서드가 우선시 됨.
확장 메서드의 장점
- 기존 코드 수정 없이 기능 추가 가능
- 코드의 가독성과 재사용성 향상
- 특정 타입에 대한 유틸리티 함수 구현이 용이