Singleton

RudinP·2023년 3월 27일
0

Study

목록 보기
5/227

retr0의 유니티 게임 에센스 강의를 듣고 정리한다.
21년도에 처음으로 유니티를 접했던 강의인데, 완강하지 못하고 흐지부지 되어서 다시 보기 시작했다.

싱글톤이란?

  • 디자인 패턴 중 하나로, 객체의 인스턴스가 오직 1개만 생성되는 패턴
  • 게임 내에 유일하게 존재하고, 다수가 접근 가능해야 할 때 사용하는 디자인 패턴

싱글톤을 쓰는 경우

  • GameManager과 같이 게임 상에서 단 하나만 있으면 되는 경우

유니티에서 싱글톤을 쓰게 되면 이점

  • 위의 인스턴스에 여러 접근이 있는 경우, 하나씩 드래그&드롭으로 인스펙터에서 할당해주기 힘들 때, 싱글톤을 사용하게 되면 자동으로 참조할 수 있도록 한다.

사용 예시

public class GameManager : MonoBehaviour {
 public static GameManager gm;
 }
 void Awake()
 {
 	gm = this;
 }
 ~중략~
}

public class GameManager : MonoBehaviour {
 private static GameManager gm;
 public static GameManager GetInstance()
 {
 	if(instance == null)
    {
    	//하나씩 찾는건 부하 발생 가능하므로 보통은 Awake 시점에 할당
    	instance = FindObjectOfType<GameManager>();
        if(instance == null)
        {
        	GameObject container = new GameObject("GameManager");
            instance = container.AddComponent<GameManager>();
        }
    }
 	return instance;
 }
 void Start()
 {
 	if(instance != null)
    {
    	if(instance != this) //두개 이상인 경우 safety check
        {
        	Destroy(gameObject);
        }
    }
 }
 ~중략~
}

static으로 선언한 뒤, Awake 시점에서 gm을 할당해주면 해당 스크립트에 접근하는 각 객체에서 별도로 인스펙터 드래그&드랍 레퍼런스 없이 gm 변수를 통해 접근 가능해진다.

싱글톤의 특징

  • 지연 생성
    : 사용하려고 할 때 그 때 새로 만들어짐.
  • 단 하나만 존재해야 함.
  • static 사용
profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글