반응형

 

 

 

싱글톤은 한번만 생성해서 사용 할 수 있지만

 

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() );

 
 
반응형

+ Recent posts