컴맹학자 2022. 10. 24. 22:25
728x90

사용이유

 

단 하나의 class(객체)를 사용 해야 할 때 사용

※ 관리 객체, 시스템 등


특징

 

1. 프로젝트에서 유일한 Only One 객체 (2개이상 존재 할 수 없음)

2. 다른 클래스에서 해당 객체를 접근 할시 특정한 방법으로만 접근 가능

3. 디자인 패턴 중 하나


사용 예제

Singleton.cpp

더보기
#include "stdafx.h"
#include "Singleton.h"

Singleton* Singleton::instance = nullptr;

Singleton::Singleton()
{
	cout << "생성" << endl;
}

Singleton::~Singleton()
{
	cout << "소멸" << endl;
}

void Singleton::Create()
{
	if (instance == nullptr)
		instance = new Singleton();
	else
		TextColor("경고. 값이 존재함", EColorType::Red);
	
}

void Singleton::Delete()
{
	SAFE_DELETE(instance);
}

void Singleton::In()
{
	cout << "In 호출" << endl;
}

void Singleton::Out()
{
	cout << "Out 호출" << endl;
}

 

Singleton.h

더보기
#pragma once

class Singleton
{
private:
	Singleton();
	~Singleton();

public:
	static void Create();
	static void Delete();

	static Singleton* Get() { return instance; }

public:
	void In();
	void Out();

private:
	static Singleton* instance;

};

Main.cpp

 

 

2개의 Create 함수를 사용 하게 되면 아래 이미지 처럼 빨강색 경고가 나옴

 


핵심

싱글톤을 만들때 생성자와 소멸자를 private: 영역에서 선언을 해서 외부에서 접근을 못하게 막아둠

 

싱글톤을 만들 때는 외부에서 접근 할 수 있도록 instance를 cpp 내에 이미지 처럼 선언 

 

외부에서 접근을 못하기 때문에 싱글톤을 만들때 오로지 Create() 함수를 통해서 만들지만 조건을 보면 한번만 접근이 가능 하고 2번째 부터는 else로 빠지는 형태

 

외부에서 해당 객체를 사용 할려면 헤더 파일에 선언한 Get() 함수를 통해서만 접근이 가능