[2025/05/20]TIL

오수호·2025년 5월 20일

TIL

목록 보기
20/60

싱글톤

싱글톤이란 무엇이고, 어떻게 구성되는가??

  1. 싱글톤을 사용하는 경우

    싱글톤은 유니티(유니티가 아니더라도)내에서 단 하나의 오브젝트로 존재할 필요가 있는 오브젝트에 적용할 수 있는 디자인 패턴이다. 예를들어, 게임의 핵심 로직을 조작하는 메서드가 들어있는 GameManager 혹은 핵심 데이터를 저장하는 DataManager등에 사용할 수 있겠다.

  2. 싱글톤을 만들기 쉽도록 만든 Generic class!

    싱글톤이란 디자인 패턴은 유니티에서 굉장히 자주 사용될 수 있기때문에, 이를 사용하기 쉽도록 Generic class형식으로 만들어 두면 이를 두고두고 사용할 수 있다.

아래는 싱글톤 Generic class의 사용예시이다.


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

    public static T Instance
    {
        get
        {
            if (!_instance)
            {   string singletonName = typeof(T).Name;
                _instance = new GameObject(singletonName).AddComponent<T>();
            }return _instance;
        }

        set => _instance = value;
    }

    private void Awake()
    {
        if (!_instance)
        {
            _instance = this as T;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            if (_instance != this)
            {
                Destroy(gameObject);
            }
        }
        
        
    }
    
}

위 코드를 보면, 싱글톤 클래스를 제네릭 클래스로 만들면서 이를 Monobehaviour를 상속받는 클래스로 제약을 걸어놓았다. 또한, 프로퍼티로 싱글톤에 접근을 하면서 이에 접근을 할때, 존재하지 않는 오브젝트이면 새로운 게임오브젝트를 만들게 함으로써 예외처리 코드까지 작성이 되어있다.

Awake에서는 싱글톤오브젝트가 하이어라키상에서 중복존재할 경우, 처음으로 Awake문을 실행한 싱글톤 오브젝트를 제외하고는 모두 파괴하는 형식으로 예외처리 코드가 짜여져있다.

profile
게임개발자 취준생입니다

0개의 댓글