2024. 3. 17. 18:51 C++/공부
C++] 기초(16) - 싱글톤(Singleton) 디자인 패턴
[들어가기 전]
디자인 패턴(Design Pattern)은 객체 지향 프로그래밍에서 자주 등장하는 여러 가지 패턴을 정리해 놓은 것.싱글톤(Singleton) 패턴은 한 클래스에서 오직 하나의 객체만을 생성하는 패턴이며, 시스템에서 어떤 자원이 공유될 때 사용한다.
싱글톤 패턴은 정적 멤버 변수와 함수를 사용하는 좋은 예이다.
[설명]
싱글톤 패턴은 생성자를 클래스의 Public 영역이 아닌 Private 영역에 넣는다.
따라서 생성자를 호출하여서 클레스의 객체를 생성 할 수 없으며,
Public 영역에 정적 함수인 getInsetance()를 선언한다.
getInstacne() 함수는 정적 함수이므로 단 한번만 객체를 생성한다.
해당 함수를 호출하면 클래스의 객체가 반환되는 형식이다.
[싱글톤 패턴의 특징]
1) 자신을 가리키는 정적 멤버 포인터 변수 Private 영역에 선언
2) 자신을 반환하는 정적 멤버 함수인 getInstance() 함수 Public 영역에 선언
- getInstance() 함수는 정적 함수이므로 단 한번만 호출되어 객체를 생성
- getInstance() 함수를 호출하면 클래스 객체 반환
- getInstance() 함수 내부에서 최초 호출 시 자신의 객체 생성
2) 1개의 객체를 사용하므로 메모리 낭비를 방지
3) 이미 생성된 객체를 활용하므로 속도 측면에서의 이점 있음
4) 동시 접근에 대한 동기화 방안을 사전 확보하고 사용하기를 권장
[싱글톤 패턴 객체 생성]
#pragma once
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* getInstance();
private:
Singleton() {};
static Singleton* Instance;
};
// 정적 멤버 변수이므로 Class 외부에서 반드시 초기화!!
Singleton *Singleton::Instance = nullptr;
// 정적 멤버 함수이므로 Class 외부에서 반드시 정의!!
Singleton* Singleton::getInstance()
{
if (Instance == nullptr)
{
Instance = new Singleton();
}
return Instance;
}
'C++ > 공부' 카테고리의 다른 글
C++] 기초(18) - 함수 오버라이딩(Overriding) (0) | 2024.03.17 |
---|---|
C++] 기초(17) - 상속(Inheritance) (0) | 2024.03.17 |
C++] 기초(15) - 정적 변수/함수(Static Variable/Func) (0) | 2023.09.27 |
C++] 기초(14) - 복사생성자(Copy Constructor) (0) | 2023.09.10 |
C++] 기초(13) - 소멸자(Destructor) (0) | 2017.11.25 |