기존 클래스에 상속 대신 메서드를 추가 할 수 있는 방법

일반적으로 기존 클래스를 확장하는 방법으로 상속이 많이 쓰인다. 하지만 일부 조건에는 상속이 좋은 선택은 아니다.

예를 들어 BCL의 System.String 타입은 sealed 클래스라서 상속 받을 수 없다. 이때 그 클래스에 새로운 메소드를 추가 하고 싶으면 확장 메서드를 사용한다.

using System;

// 확장 메서드는 static 클래스에 정의돼야 함
static class ExtensionMethodSample
{
	// 확장 메서드는 반드시 static이여야하고,
	// 확장하려는 타입의 매개변수를 this 예약어와 함께 명시해야한다.
	// -> string에 GetWordCount 함수를 추가해줌
	public static int GetWordCount(this string txt)
	{
		return txt.Split(' ').Length;
	}
}

class Program
{
	static void Main(string[] args)
	{
		string text = "Hello, World!";

		Console.WriteLine("Count : " + **text.GetWordCount()**); // 출력 결과 = Count : 2
	}
}

확장 메서드의 장점은 그것을 마치 기존 타입에 이미 정의돼있던 공용 메서드를 호출하는 것과 같이 사용할 수 있어 직관적인 코드를 작성하는 데 유용한다는 것이다.