[TIL] Unity - 매니저 싱글톤 관리

MINO·2024년 6월 25일
0
post-thumbnail

2024-06-25


Manager

게임을 관리하기 위해, 여러 매니저들이 존재한다.

개발자는
사운드 효과를 관리하는 SoundManager,
데이터를 관리하는 DataManager,
전반적인 게임 시스템을 관리하는 GameManager 등을 통해
게임을 관리한다.


싱글톤

그동안 여러 매니저들을 사용하는 방식으로 싱글톤 패턴을 사용해왔다.

싱글톤 패턴이란, 런타임 동안 메모리에 오직 하나의 인스턴스만 존재한다는 것을 의미한다.


장점

  • 전역 접근 가능 : 싱글턴 패턴을 사용하여 서비스 전역에서 접근할 수 있다.
  • 동시성 제어 : 공유 자원에 동시 접근을 제한하여 사용할 수 있다.

단점

  • 유닛 테스트 : 싱글턴을 과도하게 사용하면, 유닛 단위의 테스트가 어려워진다.
  • 잘못된 프로그래밍 습관 : 싱글턴을 너무 남용하면 추후에 정교하게 접근하여 테스트하는 방식이 어색해질 수 있다.

코드

public class GameManager : MonoBehaviour
{
	static public GameManager Instance;
    
    if(Instance == null)
    {
    	Instance = this;
        DontDestroyOnLoad(gameObject);
	}
    else
    {
    	Destory(gameObject);
	}
}

개별 싱글톤 처리

각각의 매니저를 싱글톤으로 처리하여,
매니저들이 상시 존재하고 접근을 편리하게 하는 방식이다.

SoundManager.Instance.SetVolume();
DataManager.Instance.LoadData();
GameManager.Instance.Resume();

단일 싱글톤 처리

하나만 싱글톤으로 만들고 매니저들을 연결하는 방식이다.

모든 매니저를 관리하는 매니저만을 싱글톤으로 구현하고,
나머지 모든 매니저들을 필드에 만들어두는 방식이다.

GameManager 만 MonoBehaviour 를 상속받고,
다른 매니저들은 MonoBehaviour 를 상속 받지 않는다.

따라서, 각각의 매니저들은 Awake 나 Start 가 아닌 초기화 함수를 따로 만들어주어야 한다.

public class GameManager : MonoBehaviour
{
    static public GameManager Instance;

    UIManager UIManager = new UIManager();
    DataManager DataManager = new DataManager();
    SoundManager SoundManager = new SoundManager();
    ResourceManager ResourceManager = new ResourceManager();

    private void Awake()
    {
        Instance = this; // 싱글톤 처리
    }

    private void Start()
    {
		    // 매니저들을 대신 초기화해줘야함 -> 다른 매니저는 MonoBehaviour 를 상속 받지 않음
        UIManager.Init();
        DataManager.Init();
        SoundManager.Init();
        ResourceManager.Init();
    }
}

GameManager.Instance.SoundManager.SetVolume();
GameManager.Instance.DataManager.LoadData();
GameManager.Instance.Resume();

장단점

개별 싱글톤단일 싱글톤
각자 초기화하느라 처리 속도가 느려짐초기화 속도가 더 빠름
유니티 생명주기 함수 활용 가능개별 매니저는 MonoBehaviour가 없어 생명주기 함수 활용 불가
메모리 파편화메모리 파편화 X
각 매니저에서 접근할 때, 코드가 간결함하이어라키 상 매니저가 하나만 존재

TIL 마무리

개별 싱글톤 방법을 사용하며, 싱글톤을 너무 남용하는 것이 아닌가 하는 걱정을 했었는데,
개별 싱글톤 방법과 단일 싱글톤 방법에 대해 알아보며
각각의 장단점과 특징에 대해 알아볼 수 있었다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글