1. 싱글톤 패턴의 개념 및 원리
2. 유니티에서 싱글톤 구현방법
3. 싱글톤 패턴의 장단점
하나의 클래스에서 단 하나의 인스턴스만 존재하게 하는 패턴
전역적으로 접근할 수 있어 사용하기에는 편하지만, 부분별하게 사용할 경우 코드가 얽히게 되어
유지보수가 어려워진다.
[!] 자주 사용되는 형식이므로 알아두면 좋다
위 코드에
private static Singleton _instance;
public static Singleton instance { get { return _instance; } }
형식은
즉시 초기화 싱글톤Eager Initialization Singleton) 형식으로
- 인스턴스를 미리 생성하는 싱글턴 방식이다.
게으른 초기화 싱글톤 :
위 싱글톤은 외부에서 사용할 떄instance
변수에 접근하므로, 그때new
를 통해 새로운 인스턴스를 생성하고, 인스턴스를 생성했으니 외부 클래스에서 인스턴스를 통해 클래스 내 기능을 참조할 수 있게 된다. 그 다음으로 접근할 때에는 이미 인스턴스를 생성했으니return
을 통해 인스턴스에 접근해서 사용할 수 있다.
유니티에서 구현할 수 있는 즉시 초기화 싱글톤
이 방식은 유니티에서 가장 쉽게 구현할 수 있는 싱글톤 방식중에 하나이다.
가장 처음에 배우는 방식이기도 하고,
위 방식으로 만들어도 큰 문제가 없다.
유니티에서 구현할 수 있는 게으른 초기화 싱글톤
유니티 방식으로 구현할 수 있는 게으른 초기화 싱글톤 방식이다.
재네릭 싱글톤(Generic Singleton)
싱글톤 패턴의 반복적인 코드를 제네릭으로 줄이는 방식
싱글톤을 만들기 위해선 사용하기 위한 코드 또한 만들어야 하고,
다른 싱글톤을 만들기 위해선 복붙이나 재사용을 해야 하므로, 비효율적이므로
상속을 이용해 재사용하려 하는데, 형식이 정해져 있다면 해당 형식 밖에 상속을 이용하여
이용할 수 없다.
이러한 단점을 해결하기 위한 것이 재네릭 싱글톤이다.
1) 전역 접근 : 싱글톤 패턴으로 구현된 클래스는 어디서든지 동일한 인스턴스에 접근할 수 있다.
예를 들어, 게임의 오디오를 관리하는 SoundManager 클래스가 싱글톤으로 구현되었다면, 모든 씬과 스크립트에서 SoundManager에 접근하여 사운드 효과를 제어할 수 있다.
2) 인스턴스 관리의 용이성 : 특정 객체를 한 번만 생성하고 전체에서 공유하므로
메모리를 절약할 수 있다.
1) 전역 접근 : 여러 클래스가 싱글톤 인스턴스에 의존하게 된다.
예를 들어, 게임의 다양한 UI 클래스가 GameManager 싱글톤 인스턴스에 접근하여 데이터를 가져온다면, 이 UI 클래스들은 GameManager에 강하게 결합되어 독립적으로 테스트하기 어려워진다.
2) 테스트 어려움 : 전역 인스턴스에 의존하기 때문에 단위 테스트가 어려워진다.
3) 유지보수 어려움 : 프로젝트 규모가 커질수록 유지보수가 어려워질 수 있다.
전역적으로 접근할 수 있다 보니 코드가 의도치 않게 얽히게 되고, 특정 싱글톤 클래스가 수정되면 전체 코드에 영향을 미치게 된다.