3. Singleton Pattern (싱글톤 패턴)
- 용도 :
시스템 내부에 1개의 인스턴스(static)만 생성하고 싶은 경우에 사용한다.
요약 :
어떤 클래스의 객체가 프로그램 전체에서 단 하나만 만들어지도록 하는 것이다. 즉, 단 한개의 인스턴스(static)만을 갖도록 보장하고, 이에 대한 전역적인 접근점(Data 영역)을 제공한다!
- 사용 방법 :
생성자를 private으로 선언하고, 해당하는 생성자를 클래스 내부에서만 호출함.- 단점은 전역 변수이므로 전역변수가 가지는 모든 장단점을 다 가지고 있다~
모든 곳에서 접근이 가능하므로 싱글톤 객체의 변경 시점, 변경 주체, 호출 시점을 모두 알기가 어렵다. 즉, 코드가 점점 커지면 짬뽕되기 쉽다.. 다른말로 여러 클래스와 커플링이 되어 OOP 5대원칙 중 하나인 단일책임원칙(SRP)을 지키지 못할 가능성이 크다!
복습:) OOP 5대 원칙 중 첫번째! 단일책임원칙(SRP)이란?
모든 Class는 하나의 책임만 가지며,
그 책임은 완전히 캡슐화 되어야 한다!
(응집도 High / 결합도 Low)
결론은 여러 클래스들과 연루되어 있지마~
번외:) 또 다른 문제!
멀티 쓰레드 환경에서 문제가 있다고 한다..
싱글톤은 말 그대로 하나의 인스턴스만을 가지고 있고, 전역 접근이 가능하기 때문에 race condition이 발생할 수 있다!
이를 막기 위해 싱글톤은 mutex lock, unlock를 반복적으로 걸기 때문에 코드의 성능은 떨어진다고 한다..
ex1)
구조 :
- class SoundManager
- class Bomb
- Player라는 Layer가 Bomb객체에 부딪히면 Exploded() 함수가 실행되면서 SoundManager에 있는 이펙트 소리를 실행시킨다!