Deff_Dev

[Unity/C#] Generic 다운캐스팅 본문

Unity(유니티)/유니티 공부

[Unity/C#] Generic 다운캐스팅

Deff_a 2024. 5. 20. 21:00

오늘 배운 내용

오브젝트 풀을 이용하여 오브젝트 생성을 구현했는데, 하나의 딕셔너리로 오브젝트를 관리하고 GetComponent를 최소화하 위해 오브젝트 풀로 생성되는 각각의 클래스들이 PoolObject 클래스를 상속 받도록 설계했다.

 

그리고 활성화된 PoolObject 오브젝트들을 가상함수의 오버라이딩 이용하여 자식 클래스의 Init(초기화 함수)를 불러오는 방식으로 구현했다.

 

하지만 이 방식을 Bullet이 아닌 Enemy, Item 등 여러 오브젝트로 확장할려고할 때, 각 클래스에 필요없는 초기화함수가 존재한다는 문제가 있었다.

 

객체 지향적인 관점에서 바로볼 때도 옳지 못한 방법이라 생각이 들어 가상함수를 사용하지 않는 방법을 생각해봤다.

 

튜터님과 고민을 하다가 Generic Programming을 이용해 다운캐스팅하는 방법을 생각했다.

using UnityEngine;

public class PoolObject : MonoBehaviour
{
    // PoolObject를 상속받는 자식 클래스로 다운 캐스팅
    public T ReturnMyConponent<T>() where T : PoolObject
    {
        return this as T;
    }
}

사용법

 

Generic을 이용하여 PoolObject 객체를 PoolObject를 상속받는 클래스로 다운 캐스팅한 다음 해당 클래스에 Init 함수를 불러온다.

 

확실히 Generic을 사용한 방법이 깔끔하고 효율적인거 같다.