10
02
C# 프로그래밍 가이드 : 확장메서드
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

 

확장 메서드는 특수한 종류의 정적 메서드이지만 확장 형식의 인스턴스 메서드인 것처럼 호출됩니다.
호출하려는 클래스를 첫번째 파라미터로 넣고 그 앞에 this를 추가하는 것으로 선언 가능하다.
( 선언은 A에서 하지만 B가 호출 가능한 함수가 만들어진다! )

 

유니티에서 오브젝트 끄고 켤 때는 보통 null 체크를 같이 해주고 있다.

// 명시적 널 체크
if (MyObject != null)
    MyObject.SetActive(true);

// 간단하게 쓰는 버전. 하지만 명시적인 것을 선호함. 
if (MyObject)
    MyObject.SetActive(true);

 

하지만 이렇게 일일히 널체크를 하다가는 코드도 길어지고 쓰기 귀찮기도 해서

전역 함수로 설정해놓고 쓰고자 한다.

// 일반적인 전역함수라면 이런 형태
public static void SafeSetActive(GameObject obj, bool active)
{
    if (obj == null)
        Debug.LogError("Object Null");
    else
        obj.SetActive(active);
}

 

// 호출은 이렇게 한다.
St.SafeSetActive(MyObject, true);

 

하지만 확장 메소드를 이용하면 다음과 같이 선언 및 호출할 수 있다.

// 확장 메소드를 이용한 형태
public static void SafeSetActive(this GameObject obj, bool active)
{
    if (obj == null)
        Debug.LogError("Object Null");
    else
        obj.SetActive(active);
}

 

// 호출은 이렇게 한다.
MyObject.SafeSetActive(true);

약간 취향의 문제일 수 있겠지만 명시성은 확장 메소드가 압도적.

 

 

COMMENT