소프트웨어 공부/디자인패턴

싱글턴 패턴(Singleton Pattern)

야곰야곰+책벌레 2022. 4. 28. 17:26
728x90
반응형

  싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴이다. 싱글턴 패턴은 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만들면 된다. 그리고 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하도록 해야 한다. 인스턴스가 필요하면 반드시 클래스 자신을 거치하도록 해야 한다. 그리고 어디서든 그 인스턴스에 접근할 수 있도록 만들어야 한다. 다른 객체에서 이 인스턴스가 필요하면 언제든지 클래스한테 요청을 할 수 있게 만들고, 요청이 들어오면 그 하나뿐인 인스턴스를 건네주도록 만들어야 한다.

class Singleton
{
public:
	Singleton() = default;
	virtual ~Singleton() {}

	static Singleton* getInstance()
	{
		if (uniqueInstance == nullptr)
			uniqueInstance = new Singleton();
		return uniqueInstance;
	}

private:
	static Singleton* uniqueInstance;
};

getInstance()의 속도가 문제가 되지 않는다면 그냥 사용하면 됩니다. 조금이라도 개선하고자 한다면 Singleton 클래스는 사용하려고 만들 것이 때문에 선언되면 바로 만들어버리는 것도 괜찮은 방법이다.

class Singleton
{
public:
	Singleton()
	{
		uniqueInstance = new Singleton();
	}
	virtual ~Singleton() {}

	static Singleton* getInstance()
	{
		return uniqueInstance;
	}

private:
	static Singleton* uniqueInstance;
};

thread-safe하게 mutex등을 넣어도 된다.

728x90
반응형