[C++ / Design Pattern] 싱글톤 패턴 #2
1. 싱글톤 패턴이란?
싱글톤 패턴은 어떠한 클래스의 인스턴스가 오직 1개만 생성되는 패턴을 의미합니다.
싱글톤 패턴을 다양한 방법으로 구현될 수 있지만,
이번 예시에서는 인스턴스를 얻어올 때 전에 생성된 인스턴스가 있는지 검사하는 방식으로 구현하겠습니다.
2. 싱글톤 구현
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
33
34
35
36
37
38
39
#include <stdlib.h>
#include <iostream>
using namespace std;
class Singleton {
public:
int value = 0;
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
atexit([]() {
delete instance;
});
}
return instance;
}
private:
Singleton() {};
Singleton(const Singleton& other) {};
~Singleton() {};
static Singleton* instance;
};
Singleton* Singleton::instance = nullptr;
int main() {
Singleton* singleton1 = Singleton::getInstance();
Singleton* singleton2 = Singleton::getInstance();
cout << singleton1->value << endl;
singleton2->value = 5;
cout << singleton1->value << endl;
}
1
2
3
0
5
위에서 사용된 함수 atexit은 프로그램이 종료되기 직전에 호출될 함수를 등록해주는 함수입니다.
따라서 new 연산자로 생성된 객체로 인한 메모리 누수를 막을 수 있습니다.
또한 실행 결과로 알 수 있듯이 singleton2
객체의 value
프로퍼티를 5로 할당하고
singleton1
객체의 value
프로퍼티를 출력한 결과 5가 출력된 것을 확인할 수 있습니다.
이는 싱글턴 패턴의 특징 때문으로 Singleton
클래스의 인스턴스는 실질적으로 1개만 생성되기 때문에
singleton1
와 singleton2
가 동일한 객체를 가르키는 포인터라는 것을 알 수 있습니다.
This post is licensed under
CC BY 4.0
by the author.