본문 바로가기
Unity

[Unity] 싱글톤 클래스

by Kyoung2 2022. 6. 28.
반응형

유니티에서 가장 쉽고 초보 개발자들에게 유용한 디자인 패턴이 싱글톤 패턴이라고 생각한다.

 

구조를 설계하다보면,  다른 클래스에서 전역변수 또는 함수가 필요한 상황이 생긴다.

일반적인 컴포넌트 단위로 자르다 보면 여러 클래스에서 이곳저곳 클래스에서 다른 클래스들을 참조하여 

나중에는 자신이 어느 클래스에서 어떤 변수를 선언했는지 기억을 못할 때도 있고 왜 선언했는지도 모르는 경우가

다반사이다.

 

이를 방지하기 위해 클래스 구조에서 공통적으로 사용하는 함수, 전역변수, 데이터 등을 관리하는 클래스를 만들어 줘야하는데 이것이 싱글톤 클래스이다.

 

하나의 클래스에서 전체를 관장할 수 있도록 구성하는 형태를 띄고있다.

싱글톤 클래스 하나에 여러가지 매니지먼트 클래스를 호출하여 어느곳이든 다른 클래스의 함수나 변수를 사용할 수 있게끔한다.

 

 

public class SingleTonPlatform : MonoBehaviour
    {
    ///
    클래스를 메모리에 담아둔다.
    다른 클래스에서도 호출할 수 있도록 한다.
    ///
        private static SingleTonPlatform Instance = null; 

        public static SingleTonPlatform instance
        {
            get
            {
                if (null == Instance)
                {
                    return null;
                }
                return Instance;
            }
        }

        #region Managed Class
        // 매니지먼트가 담겨있는 클래스를 선언한다.
        //ex) public GameManager gameManager;
        #endregion

        #region Global Value
		//전역 변수를 선언할 수 있다.
        #endregion

        private void Awake() // 프로그램이 실행했을 시,
        {
            if (null == Instance)
            {
                Instance = this;
                DontDestroyOnLoad(this); // 파괴되지않는 오브젝트로 선언하여준다.
            }
            else
            {
                Destroy(this.gameObject);
            }

            Init();
        }

        private bool Init() // 실행에 필요한 함수
        {
			// 선언되어있던 매니지먼트 클래스를 호출한다.
            // ex) gameManager = gameObject.GetComponent<GameManager>();
            return true;
        }

 

다른 클래스에서 호출할 경우 

아래와 같이 호출하여 사용할 수 있다. 

 

public void Start()
{
        SingleTonPlatform.instance.gameManager.Go();
}

 

함수 호출이나 전역변수를 보다 쉽게 사용할 수 있는 장점이 있지만 싱글톤 인스턴스가 너무 많은 일을 하거나 여러 클래스에 많은 데이터를 공유할 때, 결합도가 높아져 "개방-폐쇄 원칙"이 지켜지지 않는다. 향후 프로젝트를 유지 보수하는데 어려움이 생길 수 있다.

 

 

728x90
반응형

# 로딩 화면 동작 코드(Code) 설정하기
loading