Unity & C#/Scripting

C# Extension Method(확장 메서드)

coucou3 2020. 8. 14. 23:50
반응형

https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

 

확장 메서드 - C# 프로그래밍 가이드

C#에서 확장명 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 추가할 수 있습니다.

docs.microsoft.com

 

확장명 메서드를 사용하면 새 파생 형식을 만들거나 다시 컴파일하거나 원래 형식을 수정하지 않고도 기존 형식에 메서드를 "추가"할 수 있습니다. 
확장 메서드는 정적 메서드이지만 확장 형식의 인스턴스 메서드인 것처럼 호출됩니다.

 

 

확장 메서드를 사용하면 상속을 받거나 원래 클래스를 복잡하게 수정하는 것 없이 간단히 추가 메서드를 구현할 수 있다.

확장 메서드는 static class 내부에 static으로 정의해야 한다.

공식 문서의 예제와 함께 살펴보자.

 

string 값의 어절을 카운트하는 메서드가 필요할 때, 

일반 클래스에서 해당 메서드를 만들면 대충 아래와 같다.

# TestClass.cs

public class TestClass : MonoBehaviour
{
    private void Start()
    {
        var str = "Hello World! It's a Test";
        Debug.Log(StringMethod.CountWord(str));
    }
}


public class StringMethod
{
    public static int CountWord(string str)
    {
        return str.Split(new char[] {' ', '!', '?'}, 
            StringSplitOptions.RemoveEmptyEntries).Length;
    }
}

 

 

확장 메서드를 사용하면 훨씬 깔끔하게 만들 수 있다.

# MyExtensions.cs

public static class MyExtensions
{
    public static int WordCount(this String str)
    {
        return str.Split(new char[] { ' ', '.', '?' },
            StringSplitOptions.RemoveEmptyEntries).Length;
    }
}

 

# TestClass.cs

public class TestClass : MonoBehaviour
{
    private void Start()
    {
        var str = "Hello World! It's a Test";
        Debug.Log(str.CountWord());
    }
}

 

static class에서 파라미터로 'this <VariableType>'를 받는 static method를 만들면 사용할 수 있다.

static class에 따로 접근하지 않아도 해당 타입의 변수에서 바로 접근이 가능해 아주 편리하다.

반응형

'Unity & C# > Scripting' 카테고리의 다른 글

Data based structure - ScriptableObject  (0) 2020.11.06
Delegate, Event (2) - UnityEvent  (0) 2020.07.09
Delegate, Event (1) - C# Delegate  (0) 2020.07.08