유니티

싱글톤 Singleton (C#)

nock_ji 2022. 5. 15. 17:24

✏️ Singleton Pattern이란?

어떤 클래스가 최초 한 번 만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 패턴이다

전체에 단 하나이기 때문에 따로 매번 오브젝트를 생성하거나 탐색해서 찾을 필요없이 instance를 통해 빠르게 접근한다

 

 

✏️ 언제 사용할까?

여러 곳에서 동일한 상태의 객체를 동시에 접근해야 할 때

동일한 자원이나 데이터를 처리하는 객체가 불필요하게 여러 개 만들어질 필요가 없는 경우

Scene과 Scene 사이를 넘어갈 때 앞의 Scene에서 데이터를 받아와서 다음 Scene에서 사용하고 싶을 때 활용

  • 해당 클래스의 instance가 하나만 존재, 어디서든지 그 instance에 접근할 수 있어야 함
  • public으로 지정된 생성자가 없어야한다
  • instance를 만들어 놓는 것이 아닌 요청을 생성한다

 

 

📣 싱글톤의 Component는 씬에 딱 하나만 존재할 수 있음

계속 만들어지는 Enemy나 Bullet은 사용 불가함

클래스에 정적변수 static으로 자기 자신의 클래스에 대한 Instance를 만들고 Awake()함수에서 정적변수를 초기화 한다

 

public class ScoreManager : MonoBehaviour
{
	public static ScoreManager instance;

	private void Awake()
	{
		instance = this;
	}

	public void DoSomething()
	{
		print("DoSomething");
	}
}

 

다른 클래스에서 싱글톤 사용

public class MyUser : MonoBehaviour
{
		void Start()
		{
			ScoreManager.instance.DoSomething();
		}
}