주말이라고 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}");
}
이런 방법으로 사용이 가능하다
정말 제네릭 싱글톤은 싱글톤 템플릿이었다 !