class 가 SingleTon 패턴을 제대로 구현했다면 초기화 된 후에는 런타임 동안 메모리에 오직 하나의 인스턴스만 존재하게 된다.
SingleTon 클래스를 구현할 때 오직 한번만 메모리 안에 생성되어야하며 , 자기 자신과 같은 유형의 개체 인스턴스를 발견하면 즉시 없앤다.
장점
전역 접근 가능 : 싱글턴 패턴을 사용하여 리소스나 서비스의 전역 접근점 만들수가 있다.,
동시성 제어 : 공유 자원에 동시접근을 제한할 때 사용이 가능하다 .
단점
SingleTon 은 사용이 쉽다. 그렇기에 지나친 사용을 하게 될수가있게 되는데 이로인해 과한 의존을 불러올수가 있다.
그러면 SingleTon을 어떻게 사용할 수있을까
Player 오브젝트가 있다고 생각해보자
Player 와 관련된 정보들이 들어가있을것이다. ex) HP 정보, power 정보 , exp 정보 등
이 정보들은 Scene 전환이 되더라도 런타임동안 계속 남아 있을 필요가있다.
이를 SingleTon을 이용하여 런타임동안 계속 남아있게 할수가있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SingleTon<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance
{
get { return instance; }
set { instance = value; }
}
protected virtual void Awake()
{
if (instance == null)
{
instance = (T)FindObjectOfType(typeof(T));
}
else
{
Destroy(gameObject);
return;
}
DontDestroyOnLoad(gameObject);
}
}
instance = (T)FindObjectOfType(typeof(T)); 지정한 타입의 첫번째로 로드된 오브젝트를 검색한다.
DontDestroyOnLoad(gameObject) : 이는 새로운 Scene으로 로드가 됐을대 대상 오브젝트가 제거되는 것을 막고 오브젝트의 현재 인스턴스가 Scene 사이를 전환할때도 유지가 가능하게 해준다.