29 확장 메서드(1)

vencott·2021년 6월 2일
0

C#

목록 보기
29/32

개념

C# 3.0부터 지원하는 확장 메서드는 특수한 종류의 static 메서드로 마치 다른 클래스(또는 구조체)의 인스턴스 메서드인 것처럼 사용되는 기능을 제공

확장 메서드는 클래스, 구조체, 인터페이스 등에 적용 가능

효과

일반적으로 인스턴스 메서드를 추가하기 위해서는 해당 클래스 안에 메서드를 추가한다

하지만 어떤 경우에는 클래스에 직접 추가하는 것이 어려울 수도 있는데 이때 확장 메서드를 사용한다

확장 메서드를 사용하면 클래스를 변경하지 않고도 클래스 외부에서 확장 메서드를 정의함으로써 마치 그 클래스의 기능을 확장한 인스턴스 메서드를 추가한 것과 같은 효과를 낼 수 있다

정의

확장 메서드는 static 클래스 안에 static 메서드로 정의된다

첫번째 파라미터로 항상 클래스명(혹은 타입)을 지정하는데, 이는 그 확장메서드가 사용될 클래스 타입을 지정하는 것이다

이를 통해 확장메서드는 마치 그 클래스 인스턴스의 메서드인 것처럼 사용할 수 있다

확장 메서드의 첫번째 파라미터 클래스명 바로 앞에는 항상 this를 써준다

using System;
using System.Text;

namespace MySystem
{
   // static class
   public static class ExClass
   {
      // static 확장 메서드
      // 첫번째 파라미터는 this + 클래스명
      public static string ToChangeCase(this String str)
      {
         StringBuilder sb = new StringBuilder();
         foreach (var ch in str)
         {
            if (ch >= 'A' && ch <= 'Z')
               sb.Append((char)('a' + ch - 'A'));
            else if (ch >= 'a' && ch <= 'z')
               sb.Append((char)('A' + ch - 'a'));
            else
               sb.Append(ch);
         }
         return sb.ToString();
      }

      // 다른 파라미터도 있는 확장 메서드
      public static bool Found(this String str, char ch)
      {
         int position = str.IndexOf(ch);
         return position >= 0;
      }
   }

   class Program
   {
      static void Main(string[] args)
      {
         string s = "This is a Test";
         
         // 확장 메서드를 사용하는 곳에서는 첫번째 파라미터를 지정 X
         string s2 = s.ToChangeCase();

         // 두번째 파라미터부터 지정
         bool found = s.Found('z');
      }
   }
}

출처: http://www.csharpstudy.com/

profile
Backend Developer

0개의 댓글