개발 라이브러리 & 툴/유니티

Unity 싱글톤(Singleton)의 이해

하늘흐늘 2021. 10. 21. 21:14
반응형

Unity에서의 싱글톤은 일반적인 C#에서의 코드와는 다르며 일반적인 코드는 아래와 같습니다.

public class Settings : MonoBehaviour
{
    private static Settings inst_ = null;

    public static Settings Inst
    {
        get
        {
            return inst_;
        }
    }

    private void Awake()
    {
        if (inst_ == null)
        {
            inst_ = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            if (inst_ != this)
            {
                Destroy(gameObject);
            }
        }
    }
}

위의 코드에서 보면 알 수 있듯이 처음 인스턴스를 만들 때는 gameObject에 대해서 DontDestroyOnLoad를 호출하여 씬이 변경되어도 삭제되지 않게 합니다. 다음으로 추가로 인스턴스가 만들어 질 때는 새롭게 생긴 gameObject를 Destroy하여 삭제합니다.
 
위와 같은 코드는 gameObject에 연결된 객체(컴포넌트)가 씬의 변경에 따라 삭제되지 않게 합니다. 그런데 여기서 중요한 유니티 싱글톤의 특성이 있습니다. 
해당 코드를 작성한 객체뿐만 아니라 해당 객체와 연결된 gameObject에 연결된 모든 객체(컴포넌트)가 같은 싱글톤의 특성을 가지게 되어 씬의 변경에 따라 삭제되지 않습니다.
이를 응용하면 싱글톤인 객체와 연결된 gameObject에 일반 객체를 연결(등록)하여 씬의 변경에 따라 삭제되지 않고 자신의 정보를 가진 객체로 사용할 수 있습니다. 즉, 씬간의 이동에 기존 정보를 가지고 있는 객체를 위하여 사용되거나 씬간의 정보 이동을 위하여 사용할 수 있습니다. 
반대로 싱글톤인 객체와 연결된 gameObject에 등록된 객체는 씬간의 이동에 따라 정보가 초기화 되지 않는 관계로 새로운 씬에서 기존 씬에서의 정보로 인하여 오류가 생길 수도 있습니다.

반응형