C#

[C#]확장 메서드(Extension Method)

DevStory 2022. 5. 24.

확장 메서드(Extension Method)

확장 메서드는 C# 3.0에 추가된 새로운 기능으로 클래스 또는 인터페이스를 상속하거나 재구성하지 않고 클래스에 메서드를 추가할 수 있습니다.

 

확장 메서드는 클래스의 소스 코드를 수정할 수 없거나 변경할 권한이 없는 경우 클래스의 기능을 확장하는 방법으로 사용할 수 있습니다.

 

다음은 확장 메서드를 이해하기 위한 예제입니다. OriginClass라는 클래스에는 Print1(), Print2(), Print3() 메서드가 존재합니다.

public class OriginClass
{
  public void Print1()
  {
    Console.WriteLine("Print1() Method Call");
  }
  
  public void Print2()
  {
    Console.WriteLine("Print2() Method Call");
  }

  public void Print3()
  {
    Console.WriteLine("Print3() Method Call");
  }
}

OriginClass 클래스에 Print4(), Print5() 메서드를 추가하고 싶은데, 클래스를 수정할 수 있는 권한이 없으므로 확장 메서드를 사용합니다.

 

ExtensionMethod라는 정적 클래스를 만들고 아래 코드를 적용합니다.

public static class ExtensionMethod 
{
  public static void Print4(this OriginClass O)
  {
    Console.WriteLine("Print4() Method Call");
  }
  
  public static void Print5(this OriginClass O, String str)
  {
    Console.WriteLine("Print5() Method Call");
    Console.WriteLine("Print5() Param: " + str);
  }
}

Main() 메서드에서 OriginClass 클래스의 객체를 생성하고 Print4(), Print5() 메서드를 호출합니다.

class Program
{
  static void Main(string[] args)
  {
    OriginClass originClass = new OriginClass();
    originClass.Print4();
    originClass.Print5("Hello!");
  }
}

실행 결과

Print4() Method Call
Print5() Method Call
Print5() Param: Hello!

확장 메서드 특징

  • 확장 메서드는 기존 클래스에 존재하지 않습니다.
  • 확장 메서드는 정적 클래스에서 정의해야 합니다.
  • 정적 클래스와 기존 클래스에 동일한 메서드가 존재하는 경우 기존 클래스의 메서드를 호출합니다.
  • 확장 메서드의 첫 번째 매개변수를 바인딩 매개변수라고 하며, 이 매개변수의 타입은 바인딩되어야 하는 클래스입니다. 클래스 이름 앞에 this 키워드가 존재해야 합니다.
  • 두 번째 매개변수부터 일반 매개변수를 추가할 수 있습니다.

 

확장 메서드 예제

C#의 string은 .Net Framework에서 기본으로 제공하는 클래스입니다. string 클래스의 소스 코드를 변경할 수 없으므로 확장 메서드를 사용하여 메서드를 확장할 수 있습니다.

 

Space의 갯수를 반환하는 GetSpaceCount() 메서드를 확장합니다.

public static class ExtenstionString
{
  public static int GetSpaceCount(this string str)
  {
    if(!string.IsNullOrEmpty(str))
    {
      string[] spaceArray = str.Split(" ");
      return spaceArray.Length - 1;
    } else
    {
      return 0;
    }
  }
}

확장 메서드를 만들었으므로 Main() 메더스에서 문자열 객체를 생성하고 확장 메서드를 호출합니다.

class Program
{
  static void Main(string[] args)
  {
    string str = "ABC DEF GHI JKL";
    Console.WriteLine(str.GetSpaceCount());
  }
}

실행 결과

3

정리

  • 확장 메서드는 기존 클래스를 수정하지 않고 메서드를 확장할 수 있습니다.
  • 정적 클래스에서 확장 메서드를 정의해야 합니다.
  • .Net Framework에서 제공하는 기본 클래스의 기능을 확장하고 싶은 경우 확장 메서드를 사용할 수 있습니다.
반응형

'C#' 카테고리의 다른 글

[C#]Thread 생성자(Thread Constructor)  (0) 2022.05.28
[C#]캡슐화(Encapsulation)  (0) 2022.05.25
[C#]중첩 클래스(Nested Class)  (0) 2022.05.19
[C#]Partial 클래스(Partial Class)  (0) 2022.05.18
[C#]메서드 숨기기(Method Hiding)  (0) 2022.05.16

댓글