싱글턴 패턴 2
저번 포스트 에서는 그냥 Scen 교체 이후에도 안지워 지는것만 보여줬다면
그이후에 대한 글이다.
이걸 가지고 어떤 방향으로 응용이 가능한지 확인해 보자.
이전 글에서 기능은 만든 건 확인했다.

Singleton.cs
public class Singleton<T> : MonoBehaviour where T : Component
{
public static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType<T>();
if (_instance = null)
{
GameObject obj = new GameObject();
obj.name = typeof(T).Name;
_instance = obj.AddComponent<T>();
}
}
return _instance;
}
}
public virtual void Awake()
{
if (_instance == null)
{
_instance = this as T;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
}
Gamemanager.cs
public class Gamemanager : Singleton<Gamemanager>
{
public int nowGold;
public int GetNowGold()
{
return nowGold;
}
}
public int 쓰는건 인스펙터에서 일단 값을 바꿔가면서 get 연습하기위해서 선언해준거 입니다.
저번 포스트와 달리 Gamemanager.cs 는
조금 바꿨다. 그냥 현재 골드 보유하는 int 하나 선언후
그값을 Get 해주는 함수 하나 만들고 거기에 nowGold 변수를
리턴 하게 해준다.
singleton 클래스에서 gamemanager 클래스로 받아서 구현해 주는 거고
왜 이렇게 설계하는 거냐면 구현 싱글턴 패턴으로 구현하는 게 많아질수록
같은 코드를 치는 초기 작업이 많아져서 부모클래스로 묶고 처리한다.
중요 정보들이 gamemanager안에 들어가 있을 거닌가 이 정보를 다른 데에서도 불러와서 볼 수 있게 해 보자.
위에 코드로 보면 GetNowGold() 함수를 불러보자 이것만 불러오면 될 거 같은데
새로운 cs 파일을 생성하자
GetTest.cs
public class GetTest : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
Debug.Log(Gamemanager.Instance.GetNowGold());
}
}
}
여기서 볼 건 단 1줄이다. Gamemanager.Instance.GetNowGold() < 이게 어디 클래스에서 상관없이
Gamemanager.Instance 가 Gamemanager 불러올 수 있게 해 준다.
Instance를
get 하는 부분에서 _instance 리턴해주고 그 안에 있던 함수 GetNowGold를 실행해 준다.
A를 누를 때마다 로그가 남게 세팅해 줬고 이제 유니티에서 확인해 보자.
Gamemanager 안에있는 nowGold 값을 바꿔도 바로바로 다르게 찍히는걸 확인할수있다.
이걸로 singleton > 싱글턴 패턴 응용까지 완료다.
아마 개발 처음하는 사람이나 잘 안 하는 분들은 이거 보고 좋다고 생각해서 많이 만들어서 사용할 거 같습니다.
저도 많이 사용하고 지금도 사용 중임

근데 개발하다 보면 점점 이건 아닌데 싶은 코드가 나올 거예요 그때 가서 수정해 됨 그러다가 사용법 익히는 과정이니까
사용하시면 될 거 같습니다.
좋은 패턴 중 하나라고 생각함.