반응형
❓ 왜 Generic Singleton이 필요할까?
Unity에서는 GameManager, SoundManager, UIManager 등 다양한 매니저 클래스에서 싱글톤(Singleton) 패턴을 사용한다.
하지만 매번 static instance 선언, Awake()에서 중복 제거 같은 코드를 반복하게 된다.
이런 중복 코드를 줄이고 재사용 가능한 형태로 만들기 위해 Generic Singleton 패턴을 도입할 수 있다.
🧠 Generic Singleton이란?
Singleton<T>처럼 제네릭 타입을 활용하여 싱글톤 로직을 부모 클래스에서 처리하고,
필요한 매니저들은 상속만 하면 되는 구조다.
🧩 Singleton<T> 기본 구현
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
_instance = FindObjectOfType<T>();
if (_instance == null)
{
Debug.LogError(typeof(T) + " 싱글톤 인스턴스를 찾을 수 없습니다!");
}
}
return _instance;
}
}
protected virtual void Awake()
{
if (_instance == null)
{
_instance = this as T;
}
else if (_instance != this)
{
Destroy(gameObject); // 중복 방지
}
}
}
🧩 사용법: GameManager 예시
public class GameManager : Singleton<GameManager>
{
public void GameOver()
{
Debug.Log("게임 오버!");
}
}
이제 다른 스크립트에서는 다음처럼 사용 가능하다:
GameManager.Instance.GameOver();
✅ 장점 정리
- ✅ 중복 코드 제거
- ✅ 유지보수 용이
- ✅ 확장성과 재사용성 증가
- ✅ 상속만으로 싱글톤 구조 구현
⚠️ 주의사항
- Unity는 다중 상속이 불가하므로, 이미 다른 클래스를 상속 중이라면 사용할 수 없다.
- DontDestroyOnLoad(this) 등의 추가 처리는 자식 클래스에서 해야 한다.
📝 마무리
Generic Singleton은 프로젝트 규모가 커질수록 코드 정리와 유지보수에 큰 힘이 된다.
공통적인 싱글톤 구조를 반복 작성하지 않고, 한 번의 설계로 여러 매니저에 적용할 수 있는 패턴으로 적극 활용해보자!
사실 이걸보면서 잘 사용할까 싶었다..ㅎㅎ.. 나중에 천천히 또 공부해봐야지..
반응형
'C# > DesignPattern' 카테고리의 다른 글
DesignPattern - 팩토리(Factory) 패턴 (1) | 2025.08.06 |
---|---|
DesignPattern - 옵저버(Observer) 패턴 (0) | 2025.08.06 |
DesignPattern - Singleton Pattern (싱글톤 패턴) in Unity (0) | 2025.07.22 |
DesignPattern - Adapter Pattern(어댑터 패턴) + 예제 (1) | 2025.07.04 |
DesignPattern - Template Method Pattern(템플릿 메서드 패턴) vs virtual (0) | 2025.07.03 |