(C++) 싱글톤 패턴(Singleton Pattern) 이해하기
- 최초 작성일: 2025년 3월 17일 (월)
목차
싱글톤 패턴의 개념
싱글톤 패턴(Singleton Pattern)이란 하나의 클래스가 오직 한 개의 인스턴스만을 가지며, 이 인스턴스에 대한 전역 접근점을 제공하는 디자인 패턴이다.
쉽게 말해, 특정 클래스의 객체를 프로그램 전체에서 단 하나만 존재하도록 강제하고, 어디서든 접근할 수 있게 만드는 방법이다.
다음의 예시로 이해할 수 있다.
“회사에서 사용하는 공용 와이파이(Wi-Fi)는 모든 직원이 접속하여 사용하지만, 실제 와이파이 네트워크 자체는 단 하나만 존재하며 모든 직원이 이를 공유한다.”
- 공용 와이파이 네트워크: 싱글톤 클래스의 인스턴스 (단 하나만 존재)
- 직원들: 프로그램 내 다양한 클래스나 함수들(싱글톤 인스턴스를 사용하는 주체)
즉, 싱글톤 패턴은 프로그램 전반에서 동일한 인스턴스를 제공하여 중복 생성을 방지하고 자원의 효율적인 관리를 가능하게 한다.
싱글톤 패턴의 목적 및 사용 이유
-
인스턴스의 유일성 보장
클래스의 객체가 반드시 하나만 존재해야 할 경우 사용된다. -
전역 접근점 제공
어디서든 동일한 인스턴스를 공유하여 사용 가능하다. -
자원 관리의 효율성
자원을 효율적으로 관리하거나 공유된 데이터 접근을 통제하기 위해 사용된다.
C++에서 싱글톤 패턴 구현하기
기본적인 싱글톤 구현 예제
아래는 C++에서 싱글톤 패턴을 가장 간단히 구현한 예시이다.
#include <iostream>
using namespace std;
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 생성자를 private로 선언하여 외부에서 객체를 직접 생성하지 못하게 함.
public:
static Singleton* GetInstance() {
if (instance == nullptr)
instance = new Singleton();
return instance;
}
void ShowMessage() {
cout << "싱글톤 인스턴스입니다." << endl;
}
};
Singleton* Singleton::instance = nullptr;
int main() {
Singleton* obj1 = Singleton::GetInstance();
Singleton* obj2 = Singleton::GetInstance();
obj1->ShowMessage();
if (obj1 == obj2)
cout << "두 객체는 동일합니다." << endl;
return 0;
}
싱글톤 패턴은 생성자를 private으로 선언하여 클래스 외부에서 직접 객체를 생성하지 못하게 한다. 객체는 반드시 클래스 내부의 정적 메서드(GetInstance()
)를 통해서만 얻을 수 있으며, 이를 통해 객체의 중복 생성을 방지하고 오직 하나의 인스턴스만 유지되도록 강제하는 효과를 얻는다.
싱글톤 패턴의 장단점 분석
구분 | 장점 ✅ | 단점 ⚠️ |
---|---|---|
싱글톤 패턴 | 전역적으로 접근 가능하고, 유일성을 보장한다 | 전역 객체처럼 사용되어 의존성 관리가 어려워질 수 있다. |
주의사항:
싱글톤 패턴은 편리하지만 지나치게 사용할 경우 유지보수와 테스트가 어려워질 수 있으므로 신중히 사용해야 한다.
실무에서의 싱글톤 패턴 활용 사례
-
환경설정(Configuration)
프로그램의 설정 정보를 전역적으로 공유할 때 사용된다. -
로깅(Logger)
로그를 기록할 때 단일 로그 관리 객체를 사용한다. -
데이터베이스 연결
DB 연결을 관리하는 객체를 하나만 생성하여 공유할 때 사용한다.
요약
- 싱글톤 패턴은 클래스의 인스턴스를 오직 하나만 생성하며, 전역적으로 접근 가능하게 하는 디자인 패턴이다.
- 설정 관리, 로그 관리, DB 연결 등 공유 리소스를 관리할 때 유용하게 사용된다.
- 편리하지만 과도하게 사용하면 유지보수가 어려워질 수 있으므로 신중히 사용해야 한다.