들어가며
학교 수업, 심화반에서 배운 것들을 정리해보려 한다.
우선 모노 싱글턴의 스크립트 구조를 까보며 코드를 이해해보려 했지만
모노 싱글턴을 알기 위해서는 싱글턴을 먼저 설명해 두면 좋을 것 같다.
싱글턴이란?
유니티 디자인 패턴 중 가장 기초적이고 많이 쓰이는 패턴 중 하나이다.
이 패턴은 특정 클래스(스크립트)가 런타임 동안 하나의 인스턴스(instance)만을 가지게 하는 패턴이다.
(인스턴스란 객체 지향 프로그래밍(object Oriented Programming)에서 class에 소속된 개별적인 객체를 말한다.)
게임 내에서 여러 클래스에서 끌어다 쓰는 단일 오브젝트(예시로는 게임매니저, 오디오 매니저,
플레이어 매니저, 설정 매니저 등 있을 것이다.)를 관리할 때 많이 쓰인다.
싱글턴 사용법
(예시로 게임매니저에 적용해보았다.)
public static GameManager instance;
private void Awake()
{
if(instance == null)
{
instance = this
}
else
{
Destroy(gameObject);
}
}
학교 들어와서 배운 가장 기초적이고 쉬운 싱글턴이다.
public static GameManager instance;
첫 번째 코드 설명 -
public : 전역적으로 여러 스크립트에서 사용할 것이다.
static : 이 변수는 정적으로 단 하나만 존재한다.
자료형 : 클래스의 정보(변수, 함수)에 접근하기 위해 클래스 명으로 한다.
instance : 변수이름
Awake : instance가 null이라면 이 스크립트를 instance로 선언,
null이 아니라면 게임오브젝트(또는 this를 통해 클래스만 파괴할 때도 있다.)를 Destroy한다.
이러면 싱글턴 사용이 끝난 것이다.
싱글턴의 효과
public InputReader inputReader;
private InputReader inputReader;
[SerializeField] private InputReader inputReader;
기존에는 클래스에서 다른 클래스에 접근하기 위해 이런 식으로 변수를 선언하고
unity에디터 inspector창에서 드래그 & 드롭으로 놓거나
awake 같은 곳에서 가져오는 코드를 작성해야 한다. (ex.GetComponent<>())
물론 이 방법도 사용해야 할 때가 있다.
하지만 앞서 설명했듯이 여러 클래스에서 동시에 접근하려면 이러한 코드를
여러 클래스에 전부 적어야 하기 때문에
싱글턴을 사용한다.
따라서 싱글턴을 사용하면 접근하려는 모든 클래스에서 위에 설명한 방법을 쓰지 않고
아래와 같이 쓸 수 있다. 이래서 싱글턴은 굉장히 많이 쓰인다.
GameManager.instance.변수or함수이름 등 접근해야하는것