'Singleton'에 해당되는 글 1건

  1. 2008/03/24 귀차니스트 Singleton - 전역단일객체 사용방법

Singleton - 전역단일객체 사용방법

Programming 2008/03/24 22:59 귀차니스트

  C++ 이나 어떠한 언어로 프로그램을 작성하다보면 어느 문제나 그렇듯 깔끔한 인터페이스에 대한 코딩이 어렵게 느껴집니다. 그래서 공통적으로 사용하는 형태들이 모여 패턴이 되고 그 패턴들을 디자인 패턴이라고 칭하게 됩니다.
  그 중 실질적으로 단 하나의 개체에 대하여 접근하는 인터페이스가 존재하죠. 그 이름은 Singleton입니다. 사실 이미 많이 알려져있는 인터페이스이고, 많은 사람들이 사용하고 있는 디자인 패턴이기 때문에 지지부진 할지도 모르겠습니다. 하지만 정리하는 차원에서 올립니다.
  Singleton의 최대 요점은 생성자의 private, static 함수를 통한 단 하나의 통로입니다. static 함수는 해당 클래스에 대한 내부 코드에서 클래스의 인스턴스를 얻는 통로이고, private 생성자로써 공개적인 객체의 선언을 제한시키는 것입니다.

CSingleton.h (Language : cpp)
  1. #pragma once
  2. class CSingleton
  3. {
  4. public:
  5.     ~CSingleton(void);
  6.     CSingleton* GetInstance();
  7. private:
  8.     CSingleton(void);
  9.     CSingleton( CSingleton & );
  10.     CSingleton& operator=( CSingleton & );
  11. };

CSingleton.cpp (Language : cpp)
  1. #include "Singleton.h"
  2. CSingleton::CSingleton(void)
  3. {
  4. }
  5. CSingleton::~CSingleton(void)
  6. {
  7. }
  8. CSingleton* CSingleton::GetInstance()
  9. {
  10.     static CSingleton Instance;
  11.     return &Instance;
  12. }

  위와 같은 코드로써 설명할 수 있습니다. 말로써 복잡하게 설명하느니 코드로 간단하게 설명하는 것 만큼 더 좋은 것이 없죠. 위 코드는 스캇 마이어스가 사용하는 싱글톤 코드 입니다. Static 범위를 가지는 개체를 선언하고 있고, return 시 그 주소를 돌려줌으로써 별다른 객체의 초기화같은 단계가 필요없어지는 셈이죠.

CSingleton.cs (Language : csharp)
  1. public class CSingleton
  2. {
  3.     private static CSingleton Instance = null;
  4.     private CSingleton()
  5.     {
  6.     }
  7.     public static CSingleton GetInstance()
  8.     {
  9.         if (Instance == null)
  10.             Instance = new CSingleton();
  11.         return Instance;
  12.     }
  13. }

  cs 코드에서는 private static 개체의 변수를 하나 지니고 있는 것을 볼 수 있습니다. 그리고 Instance 가 null 이냐 아니냐에 따라서 객체를 생성후 그 레퍼런스를 리턴하는 것이죠. 이러한 싱글톤 인터페이스는 단 하나의 DB서버, Keyboard, Mouse들과 관련된 프로그래밍에 적용할 수 있습니다. static이니 만큼 언제 어디서나 모든 클래스에서 GetInstance만 호출함으로써 객체에 접근할 수 있습니다. 이 것 말고도 좋은 패턴들이 많은데, 각자 경우에 맞는 것을 사용하면 효율이 극대화 되겠죠.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/03/24 22:59 2008/03/24 22:59
TAG

댓글을 달아 주세요