Singleton Pattern의 GoF 정의는 아래와 같다.
“오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다.”
유니티안에서의 싱글턴 패턴 객체
- 같은 씬안에서의 데이터 공유
- 서로 다른 씬들간의 데이터 공유
유니티에서 싱글톤 객체를 구현하는 방법은 Scene에 빈 객체를 생성한 후에 오직 하나의 객체만 생성되도록 만들고, DontDestroyOnLoad 메서드를 호출하여 Scene 변경시에도 Destroy를 막아주는 형태로 구현한다.
싱글턴 패턴의 객체는 일종의 전역 변수이다.
전역 변수이므로 전역 변수가 가지는 모든 장점과 단점을 다 가지고 있다.
- 모든 곳에서 접근 가능 가능하니, 객체의 변경 시점과 변경 주체를 알기가 쉽지 않다. 호출하는 모든 코드들을 다 뒤져야 알 수 있다.
- 또한 전역 변수이기 때문에 여러 클래스 Coupling이 된다. 하나의 코드를 수정했을 때 싱글턴과 연결된 다양한 곳에서 문제를 발생 시킬 수 있는 것이다.
- 또한 전역 변수이기 때문에 멀티 스레드의 환경에서는 문제가 발생한다. 모든 곳에서 접근 가능하기 때문에 race condition이 발생할 수 있다. 그걸 피하기 위해서 필연적으로 싱글턴에선 mutex lock과 unlock을 반복해서 걸게 되는게 자연히 코드 전체적으로 Performance가 떨어지는 문제가 발생한다.
코드링크
코드링크1
코드링크2