본문 바로가기

강의자료/Class

002. 싱글톤(Singletone) 클래스


◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


클래스의 정적 변수와 정적 멤버함수를 이해하고 디자인 패턴의 기초인 싱글톤 클래스를 작성할 수 있다.
// extern 에 대해 설명하고 그 단점이 무엇인지 이야기 하자.
// 싱글톤이란 extern의 단점을 해결하고자 나온 디자인 패턴이다.
// 싱글톤의 목적은 단 1개의 객체만 생성되게 하여 이를 소스코드 전역에서 활용하는 것이다.

// 방법.
// (1) 생성자를 private으로 지정하여 코드상에서 객체를 생성하지 못하게 한다.
// (2) 정적(static) 변수를 이용하여 전역적으로 사용할 객체를 1개만 생성한다.
// (3) 정적(static) 멤버함수를 이용하여 소스코드 전역에서 객체를 불러올 수 있게한다.

#include 
#include 
using namespace std;

class Singletone
{
// 일반 클래스 코드 : 이 부분은 보통의 클래스와 동일하게 작성한다.
private:
	int share_data;

public:
	void ShowShareData()
	{
		cout << share_data << endl;
	}

	void SetShareData(int data)
	{
		share_data = data;
	}

// 싱글톤 생성 코드 : 정적 멤버함수를 이용하여 객체를 생성하지 않고도 접근할 수 있게 한다.
public:
	// Instance() 함수가 처음 호출 될때 클래스의 객체가 생성되고 두번째 호출부터는 생성된 객체의 주소를 리턴하기만 한다
	static Singletone* Instance()
	{
		static Singletone instance; // 실제 객체를 정적으로(단1개만) 생성한다.
		return &instance;
	}

// 생성자를 private으로 지정하여 임의로 객체를 생성하지 못하게 한다.
private:
	Singletone():share_data(100) {}
	~Singletone() {}
};

void main()
{
	//Singletone aa; // 오류, 객체 생성 불가.

	// 싱글톤 객체를 사용하는 방법 1.
	Singletone::Instance()->SetShareData(50);
	Singletone::Instance()->ShowShareData();

	// 싱글톤 객체를 사용하는 방법 2.
	Singletone* pIns = Singletone::Instance();
	pIns->SetShareData(200);
	pIns->ShowShareData();
}