Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 의존성 주입
- Dependency Injection
- Di
- 게임 디자인 패턴
- Canvas Scaler
- 콘솔 앱
- Abstract Factory Pattern
- 테이블 데이터
- 오브젝트 풀
- 구글플레이콘솔
- Render Mode
- 스타일 지침
- 이벤트 버스
- event bus
- 기술면접
- 프로젝트 생성
- C#
- 유니티
- 데이터 형식
- Visual Studio Installer
- 추상 팩토리 패턴
- 구글 스프레드 시트
- MVP 패턴
- Unity 기술면접
- 상태 패턴
- Object Pool
- 개발
- New Input System
- github desktop
- unity
Archives
- Today
- Total
DevDino
[게임 디자인 패턴] Singleton 본문
Singleton
싱글톤 패턴의 주요 목표는 유일성을 보장하는 것입니다. 런타임 동안 메모리에 오직 하나의 인스턴스만 존재해야 합니다. 오직 한 번만 생성되어야 하며, 같은 유형의 인스턴스를 발견하면 없앱니다.
싱글톤 예제
using UnityEngine;
public class GameManager : MonoBehaviour
{
// 싱글톤 instance 선언
private static GameManager instance;
public static GameManager Instance { get { return instance; } }
private void Awake()
{
// 이미 인스턴스가 존재하면
if (instance)
{
// 자신 삭제
Destroy(gameObject);
return;
}
// 인스턴스를 자신으로 만듦
instance = this;
DontDestroyOnLoad(gameObject);
}
}
다음과 같이 제네릭 클래스를 만들어서 상속받아 사용할 수 있습니다.
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T: Component
{
private static T instance;
public static T Instance
{
get
{
if(instance == null)
{
// 지정한 타입의 첫 번째로 로드된 오브젝트 검색
instance = FindObjectOfType<T>();
// 없다면 새로운 GameObject 생성
if (instance == null)
{
GameObject obj = new GameObject();
obj.name = typeof(T).Name;
instance = obj.AddComponent<T>();
}
}
return instance;
}
}
private virtual void Awake()
{
if(instance == null)
{
instance = this as T;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
}
싱글톤은 유니티 개발자가 많이 사용하는 디자인 패턴 중 하나이지만, 장단점이 분명하기 때문에 조심해서 사용해야 합니다.
전역 접근점을 만들어 전역에서 접근이 가능하며 공유 자원에 동시 접근을 제어할 수 있지만 사용이 쉬워 잘못된 습관이 들 수 있으며 유닛 테스트가 어려워 질 수도 있습니다.
디자인을 선택할 때 항상 유지보수 및 확장, 테스트 가능 여부를 염두에 두어야 합니다!
저는 주로 게임 내 하나만 존재하는 게임 매니저, UI 매니저, BGM 매니저 등에 사용하였습니다.
'Unity > 디자인 패턴' 카테고리의 다른 글
| [게임 디자인 패턴] 추상 팩토리 패턴(Abstract Factory Pattern) (0) | 2026.07.14 |
|---|---|
| [게임 디자인 패턴] 전략 패턴(Strategy Pattern) (0) | 2026.07.14 |
| [게임 디자인 패턴] 옵저버 패턴(Observer Pattern) (0) | 2026.07.14 |
| [게임 디자인 패턴]이벤트 버스(Event Bus) (0) | 2026.07.14 |
| [게임 디자인 패턴] 상태 패턴(State Pattern) (0) | 2026.07.14 |