[Unity] 디자인패턴 - 싱글톤(Singleton)

자몽이·2025년 7월 3일

Unity

목록 보기
3/6
post-thumbnail

싱글톤 패턴은 개발을 시작 할 때 제일 먼저 접하게 되는 디자인 패턴이 아닐까 싶다.

싱글톤에 대한 내용은 이미 정리되어 있는 것도 많지만 내 기준으로 이해가 어려웠던 부분을 따로 작성하고 싶어서 작성한 글이다.

싱글톤이란?

프로그램 전체에서 오직 하나만 존재하는 객체를 만들어, 어디서든 전역으로 접근할 수 있도록 하는 디자인 패턴이다.

싱글톤을 사용하는 이유

오브젝트를 매번 Find, GetComponent 를 사용하면 느리고 비효율적이며 반복적이고 성능 저하를 일으킨다.

싱글톤의 장점

  1. 어디서든 간단하게 접근 가능
  2. 유일한 인스턴스를 자동으로 관리
  3. 중복 생성 방지 (하나만 생성)
  4. 코드 간결, 성능 안정, 유지보수 용이

Unity에서 싱글톤을 구현하는 기본 구조

(싱글톤 구현에도 다양한 방법이 있지만, 아래 코드는 MonoBehaviour를 상속 받는 구조이다.)


public class GameManager : MonoBehaviour
{
    private static GameManager s_instance;

    public static GameManager Instance { get { Init(); return s_instance;} }


    private static void Init()
    {
        if (s_instance != null)
            return;

        GameObject go = GameObject.Find("@Managers");
        if (go == null)
        {
            go = new GameObject("@Managers");
            go.AddComponent<GameManager>();
        }

        s_instance = go.GetComponent<GameManager>();
        DontDestroyOnLoad(go);
    }

    private void Awake()
    {
        Init(); // 혹시 모를 중복 대비
    }
    
 }


🔑 이 구조의 장점

  1. get property를 사용 해, 값을 읽을 때 하고 싶은 일을 넣을 수 있다. 즉 단순히 값만 읽는것이 아니라 Init() 함수를 호출해서 생성 여부를 확인하고 s_instance값을 리턴하는 함수처럼 작동하는 속성이다.
  2. 동적으로 자기 자신을 생성하고 관리하는 방식이다. Pure C# 싱글톤이나 다른 싱글톤 구조는
    씬에 미리 붙여두는 방식을 사용 해야 하는데, 이러한 구조는 씬에 붙여두지 않고
    Instance를 처음 호출하는 시점에서 자동으로 생성된다.
  3. Monobehaviour를 상속 받기 때문에 Unity기능 사용이 가능하다.
    즉 UI,사운드 등 적용하기 용이하다.

❗ 이 구조의 단점 (주의점)

  1. 에디터에선 생성 시점이 헷갈릴 수 있다.
  2. 중복 방지 로직이 중요하다. (ex. Awake()에서 중복 제거)
  3. 초기화 순서 제어가 어렵다.

--- 한줄요약 ---

단순히 "하나만 쓰자" 가 아니라 중복 없이 안전하고 쉽게 쓸 수 있게 만드는 구조화된 방법 이다. Instance를 전역에서 접근할 수 있으니 남발 하지말고 꼭 필요한 기능만 추가해서 사용하자.

profile
개발자가 되는 그 날 까지

2개의 댓글

comment-user-thumbnail
2025년 7월 3일

덕분에 싱글톤에 대해 더 배우고 갑니다^^

1개의 답글