싱글톤 패턴이란?

싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하고,

그 인스턴스를 어디서든 접근할 수 있도록 전역적인 접근점을 제공하는 패턴입니다.

게임에서 GameManager, AudioManager, UIManager처럼 한 개만 존재해야 하는 객체를 만들 때 주로 사용됩니다.

 

구현

유일성 보장: 추가 인스턴스 생성을 막아야 하므로 Awake()에서 중복을 제한합니다.

전역 접근: public static 속성을 사용해 언제 어디서든 접근할 수 있게 합니다.

 

기본 형태

public class GameManager : MonoBehaviour
{
    public static GameManager Instance { get; private set; }

    void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
        }
        else
        {
            Destroy(gameObject); // 중복 방지
        }
    }

    public void GameStart()
    {
        Debug.Log("Game Started!");
    }
}

 

사용 예시

public class GameManagerUser : MonoBehaviour
{
    void Start()
    {
        GameManager.Instance.GameStart();
    }
}

 

확장형 싱글톤 패턴

싱글톤을 여러 매니저 클래스에 사용할 경우, 매번 같은 코드를 반복해야 하는 단점이 있습니다.
이를 해결하기 위해 제너릭(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 obj = new GameObject();
                    instance = obj.AddComponent<T>();
                }
            }
            return instance;
        }
    }
    private void Awake()
    {
        if (instance == null)
        {
            instance = this as T;
            DontDestroyOnLoad(gameObject);
        }
        else if (instance != this)
        {
            Destroy(gameObject);
        }
    }
}
public class GameManager : Singleton<GameManager>
{
    public void GameStart()
    {
        Debug.Log("Game Started!");
    }
}

 

Singleton<T> 클래스를 한 번 만들어두면,

다른 매니저 클래스들은 상속만으로 싱글톤 기능을 바로 사용할 수 있어

코드 중복을 줄이고 유지보수가 쉬워집니다.

 

 

 

'Unity > 디자인 패턴' 카테고리의 다른 글

상태 패턴(FSM)  (1) 2025.05.04
전략 패턴  (0) 2025.05.04
오브젝트 풀링 패턴  (0) 2025.03.08

+ Recent posts