-
Unity | 싱글턴 패턴 (Singleton)다시한번 개발자도전! 2026. 1. 20. 16:20
< 싱글턴 패턴 (Singleton Pattern) >
1. 정의
애플리케이션이 실행되는 동안 특정 클래스의 인스턴스가 단 하나만 존재하도록 강제하는 디자인 패턴. 어디서든 이 인스턴스에 접근할 수 있도록 전역적인 접근점을 제공.
- 비유: 한 나라의 '대통령'은 한 명뿐임. 누구든 대통령에게 연락하고 싶으면 국가 시스템을 통해 동일한 그 한 사람에게 연결되는 것과 같음.
2. 장점
- 자원 공유: 점수 관리(ScoreManager), 사운드 관리(SoundManager), 게임 설정(GameConfig)처럼 게임 전체에서 딱 하나만 있어야 하고, 모든 오브젝트가 공유해야 하는 데이터를 관리할 때 최고.
- 접근성: FindObjectOfType이나 GetComponent 같은 무거운 함수를 안 써도 Manager.Instance.DoSomething() 한 줄로 어디서든 호출 가능함.
3. 구현 방법
public class GameManager : MonoBehaviour { private static GameManager instance; // 외부에서 new로 객체 생성을 못 하게 생성자를 private으로 막음 private GameManager() { } public static GameManager Instance { get { if (instance == null) { instance = new GameManager(); return instance; } } } private void Awake() { if (instance == null) { instance = this; // 인스턴스가 비어있다면 할당 DontDestroyOnLoad(gameObject);//씬 이동간 파괴하지 않게한다. } else { Destroy(gameObject); //인스턴스가 이미 있다면 내자신을 파괴 } } }
4. 사용 방법
public class UIManager : MonoBehaviour { void Update() { // GameManager의 점수를 가져와서 화면에 표시함 scoreText.text = "Score: " + GameManager.Instance.score; } }
5. 유의해야 할 점 ⚠️
싱글턴은 강력하지만 독이 될 수도 있음.
- 강한 결합도: 모든 클래스가 싱글턴에 의존하게 되면, 나중에 코드를 수정하거나 테스트하기가 매우 힘들어짐.
- 메모리 관리: 게임이 끝날 때까지 메모리에 상주하므로, 너무 많은 데이터를 싱글턴에 때려 박으면 안 됨.
- 멀티스레드 위험: C# 일반 클래스에서 쓸 때 여러 스레드가 동시에 Instance에 접근하면 인스턴스가 2개 생길 수도 있음 (Lock 처리가 필요함).
'다시한번 개발자도전!' 카테고리의 다른 글
Unity | 반복자(IEnumerator) 와 열거자(IEnumerable) (0) 2026.01.21 Unity | 코루틴(Coroutine)과 Async/Await(Task) (0) 2026.01.21 Unity | 소팅레이어(Sorting Layer) 와 오더인레이어(Order In Layer) (0) 2026.01.20 Unity | 리지드바디(Rigidbody)와 콜라이더(collider)의 관계 (0) 2026.01.20 Unity | 콜라이더(Collider)와 충돌(collision) (0) 2026.01.20