반응형

Singleton Pattern (싱글톤 패턴)

프로그램안에서 어떤 클래스의 인스턴스가 1개만 존재 하도록, 폐쇄적으로 클래스를 디자인 하는것

 

 

구현방법

1.생성자는 private 으로 막는다, 외부에서 new 를 통한 instance 생성을 할 수 없게 만든다.

 

 

 

 

2.인스턴스 하나를 담을 수 있는 포인터변수를 선언, static 으로 설정해서, 오직하나만 존재할 수 있게 만든다

 

 

 

 

 

 

3. m_pInst를 가져오거나(get), 메모리 해제(Destroy)할 수 있는 멤버 함수들을 선언, static 변수에 접근할 수 있어야 하고

외부에서 해당 함수들을 쓸 수 있어야 하므로 public 으로 지정

 

 

 

 

 

 

 

MySingletonClass.cpp

 

4. m_pInst를 초기화 해주기 위해서는 static 멤버 변수 이므로, 생성자가 아닌 클래스 외부에서 

MySingletonClass* MySingletonClass::m_pInst = nullptr; //이런식으로 초기화를 해준다

 

 

5.GetInst() 함수를 구현한다, m_pInst 가 nullptr 이라면, 새로 생성하여 instance를 초기화 해준뒤

앞으로도 호출될때마다 이미 생성된 instance를 return 하도록 한다

 

 

6.DestroyInst() 함수를 구현한다, GetInst() 함수와 유사한 구조를 가지고 있다 차이점은

delete와 nullptr, 초기화 가 return 대신에 들어간다

 

 

 

최종코드

MySingletonClass.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
class MySingletonClass
{
private:
    MySingletonClass();
    ~MySingletonClass();
 
private:
    static MySingletonClass* m_pInst;
 
public:
    static MySingletonClass* GetInst();
    static void DestroyInst();
 
};
 
cs

 

MySingletonClass.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "MySingletonClass.h"
 
MySingletonClass* MySingletonClass::m_pInst = nullptr;
 
MySingletonClass::MySingletonClass()
{
}
 
MySingletonClass::~MySingletonClass()
{
}
 
MySingletonClass* MySingletonClass::GetInst()
{
    if (!m_pInst)
    {
        m_pInst = new MySingletonClass;
    }
    return m_pInst;
}
 
void MySingletonClass::DestroyInst()
{
    if (!m_pInst)
    {
        return;
    }
    delete m_pInst;
    m_pInst = nullptr;
 
}
 
cs
반응형

+ Recent posts