본문 바로가기

Unity/정보

[Unity 유니티] 싱글톤 패턴 (Singleton)

유니티에서 싱글톤 패턴 쉽게 이해하기: 게임 개발에서 왜 필요한가?

게임 개발을 하다 보면 어떤 오브젝트는 게임 내에 단 하나만 존재해야 할 때가 있다. 예를 들어 게임의 전체 상태를 관리하는 게임 매니저, 지속적으로 재생되는 오디오 매니저 등이 그렇다. 이런 경우, 매번 새 인스턴스를 생성하는 대신 하나의 인스턴스를 전체 게임에서 공유할 수 있는 방법이 바로 싱글톤(Singleton) 패턴이다.

유니티에서 싱글톤 패턴을 어떻게 구현할 수 있는지, 장단점은 무엇인지 알아보자.


싱글톤 패턴이란?

싱글톤 패턴은 프로젝트 내에서 특정 클래스의 인스턴스를 단 하나만 허용하고, 어디서든 그 인스턴스에 접근할 수 있도록 하는 디자인 패턴이다. 유니티에서는 게임을 관리하는 주요 객체를 하나만 두고 싶을 때 싱글톤을 사용한다. 예를 들어, 게임 매니저오디오 매니저를 싱글톤으로 설정하면, 여러 씬(Scene) 간에 데이터나 설정을 쉽게 공유할 수 있다.

유니티에서 싱글톤 코드 구현하기

싱글톤 패턴을 유니티에서 구현하는 방법을 코드 예제로 설명한다.

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

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject); // 이 객체는 씬이 전환되어도 파괴되지 않음
        }
        else
        {
            Destroy(gameObject); // 이미 인스턴스가 있으면 새로 생성된 것은 파괴
        }
    }
}

코드 설명

  1. Instance는 전역적으로 접근할 수 있는 싱글톤 인스턴스다.
  2. Awake 메서드에서, 이미 인스턴스가 존재하는지 확인한 후 없으면 Instance에 현재 오브젝트(this)를 할당한다.
  3. DontDestroyOnLoad는 씬이 바뀌어도 오브젝트가 유지되게 해준다. 만약 기존 인스턴스가 있다면 새로 생성된 인스턴스를 Destroy하여, 오직 하나의 인스턴스만 남도록 한다.

이렇게 작성된 GameManager 클래스는 이제 프로젝트 내 어디서든 GameManager.Instance를 통해 접근할 수 있다.


싱글톤 패턴의 장단점

싱글톤 패턴은 전역적인 접근성효율적인 메모리 관리라는 장점이 있지만, 주의할 점도 있다. 아래에서 자세히 알아보자.

장점

  • 전역 접근: 게임 내 어디서든 GameManager.Instance처럼 간편하게 접근 가능하다.
  • 메모리 절약: 불필요하게 같은 인스턴스를 여러 개 만들지 않아 메모리 낭비를 줄여준다.

단점

  • 테스트가 어려움: 싱글톤은 전역적으로 하나의 인스턴스만 사용하기 때문에 유닛 테스트나 모킹(Mock)이 힘들 수 있다.
  • 높은 결합도: 싱글톤 객체에 너무 많은 로직이 들어가면, 전체 코드가 싱글톤에 의존하게 되어 유지보수가 어려워진다.

따라서, 싱글톤 패턴은 게임 매니저처럼 진짜 한 개만 있어야 하는 경우에만 사용하는 것이 좋다.

결론

싱글톤 패턴은 유니티에서 여러 씬을 넘나들며 데이터를 공유할 때 유용하다. 하지만 적재적소에 필요한 만큼만 활용하는 것이 좋다. 각 상황에 맞춰 신중하게 사용해 보자.