본문 바로가기
C#/C# 학습 (TIL)

C# 중급문법 DAY3 싱글톤의 일반화

by jjiing 2022. 6. 16.

싱글톤 일반화

 

 

 

<싱글톤>

public static GameManager instance = null;

public void Awake()
{
	if(instance ==null)
		instance=this;
	else
		Destroy(gameObject);
    
    DontDestroyOnLoad(gameObject);
 }

-static으로 선언하면 하이라키 창에 올려두지 않아도 플레이 시 자동적으로 데이터 영역에 할당됨.

-instance = this에 this는 자기 자신의 주소를 가르키는 것.

 

 

싱글톤을 게임매니저, 오디오매니저 등 여러 곳에서 사용하면 좀 더 효율적으로 관리하기 위해

싱글톤 클래스를 만들고 상속해주게 할 수 있음

 

public class Singleton : MonoBehaviour
public class GameManager : Singleton
public class AudioManager : Singleton

 

 

 

그렇게 할 경우 발생하는 문제점

1. 다른 스크립트에서 GameManager.Instance. 를 사용해 접근할 경우 게임매니저에 있는 변수나 속성에 접근 불가

인스턴스가 게임매니저의 인스턴스가 아니고 싱글톤의 인스턴스이기 때문

2. 오디오매니저/ 게임매니저 등 여러개에서 싱글톤을 상속받을 경우 플레이하면 하나만 남고 사라짐

 

>>공통된 원인 : 싱글톤을 상속받은 각각의 놈들의 인스턴스가 존재해야한다.

 

>>해결 : 싱글톤을 일반화 시켜줌

각각 싱글톤을 사용할 때 다른 부분만 T로 추상화 시켜준다.

주의) Awake가 public 이나 protected로 돼있어야함

 

게임매니저에서 상속 받을 때는 이렇게 사용한다.

base.Awake();는 부모의 awake를 먼저 실행하게 하는 것

 

 

이렇게 되면

각각의 인스턴스가 생기게 된다.

첫 인스턴스는 싱글톤의 인스턴스이다.