티스토리 뷰
오늘 한 일 (회고)
- 오전
- 기획회의
- 기능 구현 논의
- 역할 배정
- 기획회의
- 오후
- 스탠다드11 프레임워크 특강듣기
- 저녁
- UIManager작성
- StartScreen 프리팹생성
새로 배운 것
싱글톤 패턴
개별 싱글톤 패턴과 중재자 패턴
제네릭 싱글톤 패턴
public class MonoSingletone<T> : MonoBehaviour where T : MonoBehaviour
{
private static T _instance;
public static T Instance
{
get
{
if (_instance != null)
return _instance;
_instance = FindObjectOfType<T>();
if (_instance == null)
{
GameObject go = new GameObject(typeof(T).Name);
_instance = go.AddComponent<T>();
}
return _instance;
}
}
protected virtual void Awake()
{
if (_instance == null)
{
_instance = this as T;
}
else if (_instance != this)
{
Destroy(gameObject);
}
}
}
이 클래스는 특정 MonoBehaviour 타입의 싱글톤 객체를 보장하는 역할을 합니다.
개별 싱글톤 패턴
public class GameManager : MonoSingletone<GameManager>
{
private void Start()
{
Debug.Log("게임매니저 셋팅완료");
}
}
public class DataManager : MonoSingletone<DataManager>
{
private void Start()
{
Debug.Log("DataManager 셋팅완료");
}
}
public class ResourceManager : MonoSingletone<ResourceManager>
{
private void Start()
{
Debug.Log("ResourceManager 셋팅완료");
}
}
public class SoundManager : MonoSingletone<SoundManager>
{
private void Start()
{
Debug.Log("SoundManager 셋팅완료");
}
}
public class UIManager : MonoSingletone<UIManager>
{
private void Start()
{
Debug.Log("UIManager 셋팅완료");
}
}
각각의 매니저들이 모노비헤이비어를 상속받습니다.
각각의 인스턴스를 받을 수 있습니다.
중재자 패턴
public class GameManager2 : MonoSingletone<GameManager2>
{
UIManager2 uiManager = new();
DataManager2 dataManager = new DataManager2();
SoundManager2 soundManager = new SoundManager2();
ResourceManager2 resourceManager = new ResourceManager2();
private void Start()
{
uiManager.Init();
dataManager.Init();
soundManager.Init();
resourceManager.Init();
Debug.Log("게임매니저2 셋팅완료");
}
}
interface IManager
{
void Init();
void Release();
}
public class DataManager2 : IManager
{
public void Init()//초기화
{
}
public void Release()//해제
{
throw new System.NotImplementedException();
}
}
public class ResourceManager2 : IManager
{
public void Init()
{
throw new System.NotImplementedException();
}
public void Release()
{
throw new System.NotImplementedException();
}
}
.
.
.
게임매니저만 싱글톤 패턴을 사용하여 게임의 주요 매니저 클래스들을 초기화하는 역할을 하고 있습니다.
Start메서드가 호출되면 Init메서드를 통해 각 매니저들이 초기화 됩니다.
각 매니저가 싱글톤 패턴을 사용할 때
- 모든 매니저가 자체적으로 싱글톤을 관리하며, 독립적인 인스턴스를 보장.
- 클래스 간 의존성을 최소화하여, 각 매니저가 서로 독립적으로 동작.
- 의존성 관리:
- 각 매니저를 필요로 하는 곳에서 직접 싱글톤 인스턴스에 접근.
- 예: UIManager.Instance.DoSomething();
게임 매니저가 중재자 역할을 할 때
- 게임 매니저가 모든 매니저의 인스턴스를 생성하고 초기화, 관리.
- 다른 클래스는 게임 매니저를 통해 매니저에 접근.
- 예: GameManager.Instance.UIManager.DoSomething();