[Unity] 제네릭 싱글톤 알아보기

네,가능합니다 ㅣ 2024. 10. 27. 01:47

주말이라고 TIL을 안쓰기는 섭섭해서 저번에 챌린지반 꾸준실습을 해보면서 봤던 제네릭 싱글톤에 대해서 공부를 좀 해볼까 한다.

 

한번 따라해보긴했는데, 알고 사용한게 아니다 보니 기억도 잘 나지 않고 이해도 안되고 해서 정리를 해봐야겠다.

 

제티릭 싱글톤이란 ?

싱글톤을 제네릭(generic) 타입으로 구현하여 여러 클래스에서 사용할 수 있게 하는 방식이다.

그러니까 싱글톤을 상속시킨다고 생각하면 이해가 쉬울것이다. 실제 구현도 상속을 하는 방식이다.

 

구현하기

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
    private static T _instance;

    public static T Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = FindObjectOfType<T>();

                if (_instance == null)
                {
                    GameObject singletonObject = new GameObject(typeof(T).Name);
                    _instance = singletonObject.AddComponent<T>();
                }
            }

            return _instance;
        }
    }

    protected virtual void Awake()
    {
        if (_instance == null)
        {
            _instance = this as T;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

 

이런식으로 아주~~~방어적인 코드를 만들어주면 된다.

그리고 게임매니저같은 클래스들이 상속받으면 끝이다 !

 

그러니까 제네릭싱글톤 = 싱글톤템플릿

이런 느낌인것이다.

 

사용하기

 

간단하게 사용해보겠다.

 

public class GameManager : Singleton<GameManager>
{
	public string name = "이종종";
}

 

이렇게 제네릭 싱글톤을 GameManger에서 상속받았으면

 

public class NameGeter : MonoBehavior
{
    Debug.Log($"이름 : {GameManager.Instance.name}");
}

 

이런 방법으로 사용이 가능하다

 

정말 제네릭 싱글톤은 싱글톤 템플릿이었다 !