본문 바로가기
C#

싱글톤(Singleton) 패턴

by GGolDDuKi 2023. 8. 23.

싱글톤 패턴이란?

  • 객체의 인스턴스가 오직 하나만 생성되는 패턴

장점

  • 최초 한 번만 고정된 메모리 영역을 할당 받고 사용하기 때문에 메모리가 낭비되지 않는다
  • 다른 클래스 간에 데이터 공유가 쉬워진다

단점

  • 여러 클래스의 인스턴스에서 데이터에 동시에 접근하게 되면 동시성 문제가 발생할 수 있다
  • 자원이 공유되기 때문에 매번 인스턴스의 상태를 초기화하지 않으면 테스트를 온전하게 수행할 수 없다
  • 자식 클래스를 만들 수 없다

Unity에서의 싱글톤 패턴 구현

public class GameManager : MonoBehaviour
{
    static GameManager s_Instance;
    public static GameManager Instance { get { Init(); return s_instance } }
    
    void Start()
    {
    	Init();
    }
    
    //Init()을 static으로 선언할 경우, 클래스명으로 접근하여 초기화가 가능
    static void Init()
    {
    	if(s_Instance == null)
        {
            GameObject object = GameObject.Find("GameManager");
            
            //GameManager 오브젝트가 없을 경우
            if(object == null)
            {
            	//GameManager라는 이름의 게임오브젝트 생성
            	object = new GameObject { name = "GameManager" };
                //생성한 오브젝트에 GameManager 컴포넌트를 추가
                object.AddComponent<GameManager>();
            }
            
            //생성한 오브젝트가 씬이 변환되어도 파괴되지 않도록 설정
            DontDestroyOnLoad(object);
            s_Instance = object.GetComponent<GameManager>();
        }
    }
}

위와 같이 구현된 싱글톤 인스턴스는 다음과 같이 접근하여 사용할 수 있다.

public class Test : MonoBehaviour
{
    void Start()
    {
    	GameManager gm = GameManager.Instance;
    }
}

Reference - https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

반응형

'C#' 카테고리의 다른 글

[C#] 프로퍼티 (Property) get, set  (0) 2023.08.30
[C#] 인터페이스 (Interface)  (0) 2023.08.24
[C#] 일반화 (Generic)  (0) 2023.08.23

댓글