본문 바로가기

C#

C# 확장 메서드(Extension Methods)

확장 메서드는 기존의 형식을 유지하면서 새로운 메서드를 추가하는 수단이다.

이것은 다음 규칙을 따른다.

  1. public이면서 정적 클래스에 정적 메서드로 정의한다.
  2. 첫 매개변수에 this 수정자를 붙인다.
  3. 첫 매개변수의 형식은 확장하려는 형식이다.

예시1

using System;
class _
{
    static void Main()
    {
        string test = "이게 바로 확장 메서드이지! GOOD";
        Console.WriteLine(test.nthWord(2)); // string에 커스텀 함수가 추가되었다. 출력결과: 바로

    }

}

//n번째 단어를 출력하는 확장 메서드 만들기

public static class StringExtensions
{
    public static string nthWord(this String str, int n)  //이와같이 추가할 형식을 this 뒤에 쓴다.
    {
        if (n < 0)
            throw new AggregateException("0이상의 숫자만 가능합니다."); //예외처리

        var words = str.Split(' ');

        if (n == 0 || n >= words.Length)
        {
            return "";
        }

        return words[n-1];
    }
}

생각보다 간단하다. 형식에 필요한 함수를 간단하게 정의할 수 있고 사용할 수 있어서 좋은 것 같다.

확장메서드의 연쇄

확장 메서드도 연쇄 호출이 가능하다고 함.
ex) 변수.확장메서드1( ... ).확장메서드2( ... );

확장메서드의 우선순위

  1. 같은 이름의 확장 메서드와 인스턴스 메서드가 있으면 인스턴스 메서드가 사용된다.
    (이 상황에서 만일 확장 메서드를 쓰려면 정적 메서드 구문을 써야함)
  2. 같은 이름의 확장 메서드가 둘 이상 있으면 확장 메서드가 아니라 정적 메서드로 호출해야한다. 컴파일러가 우선순위 못 정함.

참고문헌: C# 8.0 in a Nutshell, Joseph Albahari. Eric Johannsen.

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

C# 이벤트(Events)  (0) 2020.11.26
C# 람다식(Lambda Expressions)  (0) 2020.11.16
C#코딩의 기술 010. 클래스 하나로 증후군  (0) 2019.01.30
009. 불필요한 형변환 남용  (4) 2019.01.30
008. 의미 없는 구조체 사용  (3) 2019.01.29