[Unity] 유니티 싱글턴 패턴 구현 2 ( Singleton Pattern )

TNT·2023년 11월 10일

유니티 디자인패턴

목록 보기
3/14
post-thumbnail

싱글턴 패턴 2

저번 포스트 에서는 그냥 Scen 교체 이후에도 안지워 지는것만 보여줬다면
그이후에 대한 글이다.

이걸 가지고 어떤 방향으로 응용이 가능한지 확인해 보자.
이전 글에서 기능은 만든 건 확인했다.

1. 싱글턴 기능 구현

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.InstanceGamemanager 불러올 수 있게 해 준다.
Instance를
get 하는 부분에서 _instance 리턴해주고 그 안에 있던 함수 GetNowGold를 실행해 준다.

A를 누를 때마다 로그가 남게 세팅해 줬고 이제 유니티에서 확인해 보자.
Gamemanager 안에있는 nowGold 값을 바꿔도 바로바로 다르게 찍히는걸 확인할수있다.
이걸로 singleton > 싱글턴 패턴 응용까지 완료다.
아마 개발 처음하는 사람이나 잘 안 하는 분들은 이거 보고 좋다고 생각해서 많이 만들어서 사용할 거 같습니다.
저도 많이 사용하고 지금도 사용 중임

예제 이미지

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

profile
개발

0개의 댓글