본문 바로가기

공부/Unity

[유니티 공부] 싱글톤(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
        {
            if (instance == null)
            {
                instance = (T)FindObjectOfType(typeof(T));

                // 위의 과정을 거쳤는데도 instance가 없으면 새로 만든다.
                if (instance == null)
                {
                    GameObject obj = new GameObject(typeof(T).Name, typeof(T)); 
                    instance = obj.GetComponent<T>();
                }
            }

            return instance;
        }
    }
}

 

설명

싱글톤은 객체가 하나만 존재/생성되어야 하는 소프트웨어 디자인 패턴이다.

처음 프로그램이 실행될때 static으로 한번만 메모리를 할당하기 때문에 메모리 낭비를 막을 수 있다.

원래 유니티에서 다른 파일의 코드를 사용하려면 인스펙터창에 연결하는 과정을 거쳐야 하지만 싱글톤을 사용하면 그런 과정 없이 바로 다른 파일에서도 사용가능해진다.

 

위의 코드는 아래의 링크를 통해 공부한 것으로 제네릭타입으로 코드를 작성한 뒤, 싱글톤이 필요한 파일에 상속하는 방식으로 사용한다.

 

참고

https://www.youtube.com/watch?v=a5TCCQgdv-E