extension method(확장 메소드)의 기능

확장 메소드는 클래스 외부에 정의된 메소드이다.

static 클래스의 static 메소드로 선언하고 ‘static 클래스.static 메소드’로 호출할 수 있다.

확장 메소드를 사용하면, 클래스에 새로운 기능을 추가할 수 있다.

[extension method (1) - 예시 코드]

using System;

namespace ExtensionMethod
{

	//public class StringOperations
	//{
	//	public int GetNumberOfLines(string input)
	//	{
	//		return input.Split("\n").Length;
	//	}
	//}


	// extension method 는 class 외부에서 static 클래스로 선언
	public static class StringExtensions // static 추가
	{
		public static int GetNumberOfLines(this string input) // static 추가 / 매개 변수에 this 추가
		{
			return input.Split("\n").Length;
		}
	}

	internal class Program
	{
		static void Main(string[] args)
		{
			var multilineString = @"빨 - 빨 - 빨간 맛, 궁금해 honey 깨물면 점점 녹아든 strawberry 그 맛
						Corner candy shop 찾아봐 baby
						내가 제일 좋아하는 건 여름 그 맛
						야자나무 그늘 아래 졸고 싶고
						뜨거운 여름밤의 바람은 불고
						너무 쉽게 사랑 빠져 버릴 nineteen
						우린 제법 어울리고 또 멋져";

			// var numberOfLines = new StringOperations().GetNumberOfLines(multilineString);
			// Console.WriteLine(numberOfLines);

			var numberOfLines = StringExtensions.GetNumberOfLines(multilineString);
			Console.WriteLine(numberOfLines);
		}
	}
}

[extension method (2) - 예시 코드]

using System;

namespace ExtensionMethod1
{
	public class Duck
	{
		public string Quack()
		{
			return "(확장 메소드 아님) 오리는 꽥꽥.";
		}
	}

	// 확장 메소드 (1)
	public static class DuckExtensions
	{
		public static string Quack(this Duck duck)
		{
			return "(확장 메소드 임) 오리는 꽥꽥.";
		}
	}

	// 확장 메소드 (2)
	public static class DuckExtensions1
	{
		public static string Quack(this Duck duck, int times)
		{
			return $"{times}번 꽥꽥 웁니다.";
		}
	}


	internal class Program
	{
		static void Main(string[] args)
		{
			var duck = new Duck();
			Console.WriteLine(duck.Quack(3));
			// Console.WriteLine(DuckExtensions.Quack(duck));
		}
	}
}
3번 꽥꽥 웁니다.

extension method 요구 조건

  • 확장 메소드가 정의된 클래스는 정적이어야 한다.
  • 확장 메소드는 확장하길 원하는 클래스의 객체를 this 를 추가한 매개 변수로 가져야만 한다.

태그: ,

카테고리:

업데이트:

댓글남기기