Unity/기능

[Unity] 제네릭 메서드

turbulence93 2025. 7. 7. 22:36

1. 제네릭 메서드란?

타입을 미리 지정하지 않고, 호출 시점에 타입을 지정하는 형식 매개변수를 사용하는 메서드.

public T Return<T>(T value)
{
    return value;
}
 
  • T는 타입 매개변수.
  • 호출 시 Return<int>(10) 또는 Return<string>("Hello").

2. 제약조건 

public void PrintComponentName<T>(T component) where T : Component
{
    Debug.Log(component.name);
}
  • where T : Component → Unity 컴포넌트만 허용
  • 제약을 걸면 GetComponent<T>() 같은 메서드도 안심하고 사용 가능

3. Unity 실전 예제

//추상 클래스
public abstract class BaseCreature : MonoBehaviour
{
    protected BaseStat stat;
    
    public T GetStat<T>() where T : BaseStat
    {
    	return stat as T;
    }
}

//
public class Player : BaseCreature
{
    public override void Init()
    {
    	base.Init();
    	stat = GetComponent<PlayerStat>();
    	stat.Init(this);
    }
    
    public PlayerStat GetStat()
    {
    	return stat as PlayerStat;
    }
}

//외부에서 플레이어를 통해 stat에 접근하면 baseStat이 아닌 playerStat에 접근가능
public class Damaged : MonoBehaviour
{
    private Player player;
    
    public void Damaged()
    {
        if( owner.GetStat().isInvincible ) return;
    }
}
  • 외부에서 stat을 호출할때 제네릭 메서드를 통해서 타입에 맞는 stat을 반환 받을 수 있다.
  • 외부에서 불필요하게 캐스팅 로직을 실행하지 않아도 됨.

4. 마무리

제네릭 메서드를 통해 제네릭 클래스를 사용하지 않아도 다형성을 유지할 수 있다.
내부에서 타입을 미리 캐스팅해서 외부에 제공하기 때문에 깔끔한 코드 유지도 덤이다.

'Unity > 기능' 카테고리의 다른 글

[Unity] Animator의 CrossFade  (0) 2025.07.11
[Unity] 오브젝트 풀링 구현하기  (1) 2025.07.08
[Unity] OverlapBox 와 OverlapBoxNonAlloc  (0) 2025.07.03
[Unity] Rigidbody - MovePosition  (0) 2025.07.01
[Unity] 전역 using 사용하기  (0) 2025.06.30