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 |