TIL_2025_02_24 확장 메서드

김효중·2025년 2월 24일

확장 메서드란?

확장 메서드란 클래스의 기능을 확장할 수 있는 메서드이다.
원래 클래스에 없던 기능을 사용자가 정의하고 구현하여 원래 있던 기능처럼 사용할 수 있도록 해준다.

언제 사용하는가?

기본적으로 사용자가 직접 만든 클래스의 경우 새로운 함수를 추가하는건 간단하다.
하지만 기존 클래스를 변경할 수 없는 경우, Sealed로 봉인된 클래스
유니티 내부 클래스처럼 수정을 할 수 없는 경우에 추가 기능을 만들기 위해 사용합니다.

어떻게 사용하는가?

정적 클래스, 정적 함수

확장 메서드를 사용하기 위해서는 새로운 클래스가 필요하며 이때 정적 클래스여야합니다.

public static class 클래스이름
{
	public static 반환타입 메서드이름(this 대상타입 식별명, 매개변수)
    {
    	확장 메서드 내용
    }
}

위 코드는 확장 메소드와 그 메서드가 포함되 클래스의 예시입니다.
static으로 정적으로 선언하는 것에 유의합니다.

사용 예시

일반 예시

public static class TransformExtensions
{
    public static void ResetPosition(this Transform transform)
    {
        transform.position = Vector3.zero;
    }
}

위와 같이 선언하였을 경우

transform.ResetPosition();

위와 같이 원래의 Transform 클래스의 함수처럼 사용이 가능하다.

제약 조건 예시

특정 클래스를 상속 받는 경우에만 확장 메서드를 사용하도록 할 수 있다.

public static bool HasComponent<T>(this GameObject gameObject) where T : MonoBehaviour

위 부분은 제네릭 타입 T에 대해 제약조건으로 MonoBehaviour를 상속 받은 경우에만 사용가능하도록 합니다.
예를 들어 Rigidbody, CircleCollider와 같이 MonoBehaviour를 상속 받은 오브젝트에 대해서는 사용할 수 있지만 int, float의 경우에는 대입할 수 없다.
해당 코드는 제너릭 T의 문제점을 예방하여 잘못된 타입 사용을 방지 할 수 있다.

public static bool HasComponent<T>(this GameObject gameObject) where T : MonoBehaviour
{
    return gameObject.GetComponent<T>() != null;
}

위는 확장메서드의 예시이다.

obj.HasComponent<Rigidbody>();

위와 같이 사용하여 컴포넌트 보유 여부를 알 수 있다.

profile
도전하는 개발자

0개의 댓글