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);
약간 취향의 문제일 수 있겠지만 명시성은 확장 메소드가 압도적.
'🌍 C# Study > C# 케이스 스터디' 카테고리의 다른 글
for 문에서 AddListener 람다식은 주의해야한다. (AddListener for loop) 클로저 Closure problem (5) | 2019.12.12 |
---|---|
List<T> Sort (0) | 2019.12.10 |
C# 글자 표기 문자 형식 string.Format / ToString (0) | 2019.09.07 |
배열Array 초기화 / 리스트List 초기화 / 배열의 복사 / 리스트의 복사 (0) | 2019.07.07 |
Rectangular Array (다차원 배열) / Jagged Array(가변 배열) (0) | 2019.07.07 |