ACE_Singleton<> 를 이용한, 쉽고 빠른 싱글톤 만들기

ACE 에서 제공하는 ACE_Singleton< TYPE, ACE_LOCK > Class Template 를 이용하면 간단하게 싱글톤 클래스를 만들수 있다. 싱글톤 패턴에 대해서는 여기 적지 않고, 간단히 사용법만 적는다.

멀티 쓰레드 환경에서의 싱글톤 생성때문에, ACE_Singleton 는 ACE_LOCK 을 인자로 받지만, 여기서는 그걸 무시하고 ACE_Null_Mutex 만 쓴다.( 원 예제가 그래서... ) 만약 locking 에 신경써야 한다면, ACE_Recursive_Thread_Mutex 를 쓰도록 하자.

코드를 보면 알겠지만, 세가지만 신경써주면 된다.

  1. friend class ACE_Singleton<foo, ACE_Null_Mutex>; 를 추가한다.

  2. 생성자와 소멸자를 private 으로 만들어서, 직접적인 생성을 막는다.
  3. typedef ACE_Singleton<foo, ACE_Null_Mutex> FOO; typedefine 을 쓰자.

실제로 불러서 쓸때는 instance() 멤버함수를 통해 인스턴스를 얻을수 있다.

위 코드를 출력해보면, 한번만 만들어 진다는것을 알수 있다.

instnace() 가 돌려주는 값은 포인터이다. 이 값을 copy 해두고 쓰려면,

음... 이건 모양이 안좋군. 가져다 쓰는 입장에서 원 클래스 이름 foo 와 디파인된 FOO 를 모두 알아야 하다니?

ACE_Unmanaged_Singleton<TYPE, ACE_LOCK>

ACE_Singleton 과 같지만, ACE_Object_Manager 에 등록하지 않는다고 한다. 오호라 ACE_Object_Manager 가 뭘 하는지 알아야겠구나. 그전까진 그냥 원문만 적어둔다.

ACE_TSS_Singleton<TYPE, ACE_LOCK>

thread-specific 한 싱글톤을 만들어내는 녀석인거 같다. 역시 자세한 내용은 뒤로 미룬다.

ACE_Unmanaged_TSS_Singleton< TYPE, ACE_LOCK >

ACE_TSS_Singleton<TYPE, ACE_LOCK> 가 ACE_Object_Manager 에 등록되지 않는 놈이겠지. 이놈도 자세히 공부하는건 나중으로.

ACE_Cleanup Class

ACE_Object_Manager 에 의해 clean 되는 클래스들의 base 클래스랜다. 위의 싱글톤 클래스들은 모두 이녀석들의 자식이었다. ACE_Object_Manager 를 공부할때 같이 봐야겠군.


CategoryAce

ace/Singleton (last edited 2005-02-11 08:34:22 by )