본문 바로가기
유니티/개념 정리

확장 메서드

by fore4022 2025. 7. 2.

 직접 Tweening 효과를 구현하는 과정에서 처음으로 접하게 되었다.

transform.DOScale(3, 1);// Tweening 패키지 DOTween을 사용하는 예시이다. 

확장 메서드란?

  • 기존에 있는 클래스 외부에서 메서드를 구현하고, 추가되는 메서드이다.
  • 확장 메서드는 정적 클래스에서만 구현 가능하다.
  • 기존 클래스의 메서드처럼 사용 가능하다.

콜라보 상품을 예시로 간단하게 설명해보겠다.

회사 'alphabet'과 회사 'number'가 콜라보 제품을 출시하였다.

'alphabet'의 콜라보 상품 'A'를 구매하면 'number'의 굿즈 '123'을 받을 수 있다.
'123'을 받기 위해서, 무조건 'A'를 구매해야 된다.

'alphabet'은 구매하면 '123'을 받을 수 있는 상품 'A'를 만들었지만, '123'은 'number'가 만든 것이다. 

회사 'korean'에 상품 'ㄱ'이 있다.

'ㄱ'을 구매해서, '123'을 받을 수 없다.
'korean'은 'number'와 콜라보하지 않았기 때문이다.

 위의 예시에 사용된 용어들은 아래와 같다.

 

회사 'alphabet' = 확장 메서드를 구현할 대상이 되는 클래스

회사 'number' = 확장 메서드를 구현한 클래스

회사 'korean' = 확장 메서드가 구현되지 않은 클래스

콜라보 상품 'A' = 'alphabet(확장 메서드를 구현할 대상이 되는 클래스)'의 인스턴스

굿즈 '123' = 확장 메서드

상품 'ㄱ' = 'korean(확장 메서드가 구현되지 않은 클래스)'의 인스턴스

구현 예시

public static class ExtensionClass
{
	public static void MethodA(this Transform transform, int index)
	{
		Debut.Log($"Extension MethodA = {index * index}");
	}
}// Transform을 통해서 사용할 수 있는 MethodA가 생겼다.

public class TestClass : MonoBehaviour
{
	private void Start()
	{
		transform.MethodA(5);
	}
}// 실행 결과 : Extension MethodA = 25
  • 첫 번째 매개변수는 메서드가 추가될 클래스 타입입니다.
    • 앞의 this는 ‘자기 자신에서만 사용 가능하다.’는 한정자입니다.
    • 첫 번째 매개변수는 입력하지 않아도, 메서드를 호출 할 수 있습니다.
    • 다른 클래스에 추가하고 싶으시다면, 첫 번째 매개변수의 타입을 변경하면 됩니다.
      예시 : ) this Rigidbody2D rigidbody

어디에 사용되나요?

 다른 개념과 다르게, 어디에서 사용되는지 떠오르지 않을 수 있다.

 확장 메서드에 대해서, 생길 수 있는 여러 질문에 답하면서 알아보자.

"제가 만든 클래스 ExampleA가 있습니다."
"ExampleA에서 메서드를 구현하는 것과 확장 메서드로 구현하는 것이 차이가 있나요?"

 위 질문의 답은 두개로 나뉜다.

 ExampleA라는 클래스가 여러 메서드가 구현된 클래스라면, 확장 메서드로 메서드를 추가 구현하는 것은 불필요한 정적 클래스를 생성한 것 입니다.

 위의 예시들에서 유니티 기본 컴포넌트인 Transform에 확장 메서드를 구현한 것을 확인할 수 있습니다. 그렇다고 해서, 확장 메서드를 유니티 기본 컴포넌트에만 사용하는 것은 아닙니다.

 ExampleA가 타입을 정의하려는 것이라면, 확장 메서드로 메서드를 구현할 수 있다.

"어라? 타입을 정의하면서, 메서드도 같이 구현이 가능하지 않나요?"

 네, 타입을 정의하면서, 메서드도 구현할 수 있습니다.

 하지만, 방법이 다르기 때문에 가지는 의미가 다릅니다.

‘확장 메서드로 구현’

  • 타입의 정의와 기능 구현의 완전한 분리
  • 타입 이외의 값을 사용하는 메서드
    • 타입이 가지는 고유한게 아니라는 관점에서, 타입 정의와 분리

`타입 정의와 함께 메서드 구현'

  • 정의된 타입 자체가 메서드 실행의 주체인 경우
    • 구현하는 메서드가 타입에서 정의된 값만을 사용
  • 타입 필드의 보호 수준
    • 값의 사용을 위한 프로퍼티 구현

 그렇기 때문에, 의도에 따라서 적절한 것을 사용해서 구현하시면 됩니다.


마무리하며

 처음 생각한 것보다 글이 많이 길어지게 되었다. 그래도 봐주셔서 감사합니다.

 

더 빨리 알았으면 좋았을 텐데…

to 내 유틸리티 클래스에게

'유니티 > 개념 정리' 카테고리의 다른 글

Service Locator  (3) 2025.08.16
Dependency Injection  (0) 2025.07.10
메서드 체이닝  (0) 2025.06.30
SerializedProperty  (0) 2025.04.28
Custom Editor  (0) 2025.04.28