싱글톤은 한번만 생성해서 사용 할 수 있지만
n 개 까지도 싱글톤 내부에서 생성 할 수 있다
(n 개는 한번씩만 생성됨)
[프로그램 전체에 Only one 객체만 존재 ]
전역변수로 글로벌을 생성할 경우 2,3,4,,....., n 번 생성될 가능성이 있다 이를 방지하기 위한 패턴
오직 하나의 객체만 만들어 사용 한다라는 전제로 탄생한 패턴
point : 얻어오는 함수 와 파괴함수만 public 나머지는 private or protected
생성자도 외부접근을 막아버려 생성을 못하게 하고 얻어오는 함수 에서 생성 처리를 해준다
정리 - static 키우워드로 전역적인 방법으로 객체를 한번 만들거나 혹은 만들어진 객체의 인스턴스 주소를 리턴해 주는 패턴
그렇기에 객체를 직접 생성하는 생성자는 private 되어 있다
싱글톤 패턴은 메모리 풀 같은 객체 하나만 존재해야 할 가능성이 높은 클래스에 대해 쓰여지는 패턴이다
메모리풀을 사용자가 의미없이 여러개 생성하는 상황이 발생하면 메모리 부족으로 연결 될 수 있음
싱글톤으로 설정될 클래스가 부모=A, 자식=(B,C,D,E.....) 구조로
되어 있는 경우 자식의 개수가 정해져 있는 불변의 상태에서 사용하는 것이 가능하다
상태값을 외부에서 설명할 수 있게 해놓고(ex #define ) 필요한 subclass 에 대한 포인터를 넘겨 받는 것인데
만약 서브 클래스가 나주에 추가 된다면 싱글톤의 생성부분 함수를 수정해야 하는 상황이 발생(싱글톤은 수정하지 않는다는 원칙이 위배됨)
-> template 을 점목시키면 보다 나은 해결책이 될 수 있음
Tip : 멤버변수, 멤버 함수는 Static 으로 선언 because class 내부에서 static 끼리 접근가능 함으로
주의 :
1. 생성자를 만들어 놓지 않으면 묵시적 기본 생성자는 public 이므로 singleton 객체를 여러개 생성할 수 있는 상황이 벌어짐으로
생성자를 private or protecte 에 선언해야 한다
2. 싱글톤의 복사 생성자도 private, protected 로 막아야 한다
복사 생성자가 불리는 경우 복사가 일어남으로 객체가 n 가 존재할 가능성이 있다( 싱글톤 철학에 위배 )
Singleton test( *Singleton::Getinstance() );
'디자인패턴과방법론 > 디자인패턴' 카테고리의 다른 글
command 패턴 (0) | 2012.11.02 |
---|---|
instance Pool 패턴 (0) | 2012.11.02 |
Prototype 패턴 (0) | 2012.11.02 |
Factory Method 패턴 (펙토리 패턴), 생성자에 인수를 넘기는 건 썩 좋지 못하다 (0) | 2012.11.02 |
Proxy 패턴 (0) | 2012.11.02 |