티스토리 뷰

C#에는 기존에 존재하는 클래스에 메서드를 더할 수 있는 확장 메서드(Extension Methods)라는 기능이 있다.

그렇다면 사용법을 간단하게 알아보자.

 

Extension Methods

public static class ClassToExtendExtensions
{
    public static void ExtensionMethodName(this ClassToExtend o)
    {
        // Do Stuff
    }
}

사용법은 그야말로 간단 그 자체다.

중요한 건 '정적 클래스에서 정적 함수로 선언해야 한다'는 것. 다시말해서 static class 안에서 static 함수로 선언해야 한다. 그리고 함수의 인수로는 반드시 this [확장 대상 클래스] 변수명이 첫 매개변수로 포함되어야 한다는 것이다.

 

이 조건 만 맞춘다면 다른 조건은 없다.

매개변수를 늘리는 것도 가능하고, 반환값을 바꿀수도 있는 등, 일반 메서드에서 할 수 있는 것은 다 할 수 있다.

[다만, 전역 클래스에 전역 함수다 보니 함수 호출은 다소 많이 제한적이다.]

 

사실상 유니티나 C# 기본 메서드 중에서 아쉬운 점을 직접 보완할 수 있는 기능으로, 알아두면 편한 경우가 많다.

가령, 처음에 언급한 벡터의 특정 값 만 바꾼다거나, 스칼라 값으로 랜덤한 방향의 벡터값을 가져온다거나...

사실상 개발자 본인이 어떤 아이디어를 그려내는 가에 따라서 크게 달라지는 기능인 셈이다.

 

참고로, 해당 함수를 사용하려면 다음과 같이 사용하면 된다.

ClassToExtend.ExtensionMethoeName();

즉, 원래 클래스에 존재하는 메서드와 동일한 방식으로 사용이 가능하다!

[다만, 실 동작은 ClassToExtendExtensions.ExtensionMethodName(o)과 동일하다.]

 

사실, 확장 메서드 자체는 클래스 외부에서 클래스의 함수를 정의하는 것이기 때문에 단일 책임 원칙을 위반하는 기능으로, 남용하는 것은 좋지 않다. 특히, 본인이 작성한 클래스에 사용하는 건 절대 금지.

[당연하지만, 한 파일에 적어도 될 걸 2개 파일에 나눠서 적는 것이다. 대표적인 스파게티 코드.]

반대로 라이브러리 클래스 등과 같이, 수정 불가능한 클래스에 추가 함수를 작성하는 용도로 사용한다면 어마어마한 활용도를 보일 수 있는 기능이기도 하다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함