컴퓨터 구조

싱글톤 패턴

monstro 2024. 11. 12. 20:53
728x90
반응형

규모가 있는 식당을 떠올려보면 많은 직원들이 식당의 사장님에 의해 고용되어 근무합니다.

그리고 그중에서는 지배인처럼 다른 직원들을 관리하는 직원이 존재합니다.

일반적인 경우 지배인의 수는 그리 많지 않은 편입니다.

 

싱글턴은 식당에서의 지배인의 역할을 수행합니다.

유일성이 보장되는 인스턴스로서 싱글턴은 주로 다른 데이터를 제어하거나 관리하는 역할을 수행합니다.

이번 포스트에서는 싱글톤 패턴을 사용하는 방법을 예제를 통해 알아보겠습니다.

 

- Unity를 통한 싱글톤 패턴의 구현

제일 먼저 Player에게 붙어있을 Player 컴포넌트의 코드입니다.

public class Player : MonoBehaviour
{
    private void Start()
    {
        Managers managers = Managers.Instance;
    }
}

 

싱글톤 역시 인스턴스이므로 Start가 호출될 때 Managers 클래스의 인스턴스(=싱글톤)를 생성합니다.

그렇다면 Managers 클래스의 코드를 보도록 하겠습니다.

public class Managers : MonoBehaviour
{
    static Managers s_instance;

    // 외부에서 Managers의 Instance 프로퍼티를 Get하면 Init() 함수를 호출하여 Managers 인스턴스(=싱글톤)를 생성
    public static Managers Instance { get { Init(); return s_instance; } }

    // 싱글톤 오브젝트를 생성하는 함수
    static void Init()
    {
        // 싱글톤 인스턴스가 없다면
        if (s_instance == null)
        {
            // Hiearchy에서 #Managers 오브젝트를 찾음
            GameObject manager = GameObject.Find("#Managers");
            // 오브젝트가 없다면
            if (manager == null)
            {
                // 오브젝트를 생성
                manager = new GameObject { name = "#Managers" };
                // 오브젝트에 Managers 컴포넌트를 붙힘
                manager.AddComponent<Managers>();
            }

            // 싱글톤 오브젝트가 씬이 전환될 때 파괴되지 않도록 설정
            DontDestroyOnLoad(manager);
            // 싱글톤 인스턴스를 초기화
            s_instance = manager.GetComponent<Managers>();
        }
    }

    private void Start()
    {
        Init();
    }
}

 

우선 싱글톤의 경우에 유일성이 보장되어야 하므로 static 키워드를 사용하였습니다.

그리고 Managers 컴포넌트가 붙어있는 오브젝트싱글톤 오브젝트로서 동작합니다.

이를 위해 싱글톤 오브젝트를 생성하는 일련의 과정Init() 함수에서 이뤄집니다.

 

따라서 Player 클래스의 Start() 함수에서

Managers 클래스의 프로퍼티 Instance를 호출함으로서

싱글톤 오브젝트(=#Managers)를 생성하고 생성된 오브젝트에 싱글톤 컴포넌트(=Managers)를 붙히

싱글톤 인스턴스(=s_instance)를 return 받아 싱글톤의 설정 과정이 끝나게 됩니다.

 

실제 실행결과를 보겠습니다.

 

 

시작하기 전의 Hiearchy는 위와 같이 설정되어 있습니다.

이제 시작 버튼을 눌러보겠습니다.

 

 

문제없이 오브젝트가 생성되고, 싱글톤 컴포넌트도 정상적으로 붙어있습니다.

현재는 예시를 Unity로 보여드렸지만, 싱글톤 패턴은 게임뿐만 아니라 다른 부분에서도 응용이 가능합니다.

물론 처음에는 이해하기가 힘들지만 유일성이 보장받는다는 특징만큼은 꼭 알아주셨으면 좋겠습니다.

 

 

 

 

728x90
반응형