C# 확장 메소드를 사용하면 새로운 형식을 만들거나 다시 컴파일 하는 등의 원래 형식을 수정하지 않고 기존 형식에 메소드를 추가할 수 있다. 확장 메소드는 정적 메소드이여도 인스턴스 메소드 인것처럼 호출된다.
확장 메소드 요구사항
- 첫 번째 매개 변수는 메소드에서 확장하거나 연산하는 형식에 해당한다.
- 확장 메소드를 지정하려면 this 한정자를 확장된 형식에 접두어로 붙여야 한다.
- 메소드를 확장 메소드로 접근하기 위해 using 지시문을 통해 확장 형식의 네임스페이스를 포함한다.
사용 예시
유니티의 transform에 확장 메소드를 추가하여 특정한 오브젝트의 자식 오브젝트를 찾아 반환하는 기능을 구현했다.
using UnityEngine;
// 추가 기능 (확장 메소드) 제공 클래스
public static class Extend_TransformHelpers
{
// 추가기능 변수는 스태틱으로 선언
// 어느 타입으로 지정할 것인지 this로 지정해야한다.
public static Transform FindChildByName(this Transform transform, string name )
{
Transform[] transforms = transform.GetComponentsInChildren<Transform>();
foreach(Transform t in transforms)
{
if(t.gameObject.name.Equals(name) == true)
{
return t;
}
}
return null;
}
}