싱글톤 패턴(Singleton Pattern)은 객체 지향 프로그래밍에서 특정 클래스의 인스턴스를
오직 하나만 생성하고, 이 인스턴스에 전역적으로 접근할 수 있도록 하는 디자인 패턴입니다.
1. 인스턴스 변수 : static Airplane* instance;
클래스 내에서 인스턴스가 유일하게 존재하도록 static 포인터로 선언한다.
2. 생성자 : Airplane();
싱글톤 패턴에서는 객체가 오직 하나만 존재해야 하므로,
클래스 외부에서 새로운 객체를 생성하지 못하도록 생성자를 private으로 만든다.
생성자를 public으로 두면, 사용자가 new 키워드로 계속 객체를 생성할 수 있어,
여러 인스턴스가 생기게 되어 싱글톤 패턴이 깨진다.
3. getInstance() 메서드
이 메서드는 싱글톤 인스턴스를 반환한다.
만약 아직 인스턴스가 생성되지 않았다면, 새로 생성하고, 이미 존재하면 기존의 인스턴스를 반환합니다.
4. 복사 생성자와 대입 연산자 삭제 또는 private 선언
복사 생성자를 private으로 설정하거나 삭제하면, Airplane 객체를 복사하려고 할 때 컴파일 오류가 발생한다.
만약 복사 생성자를 허용한다면, Airplane 객체를 복사해서 새로운 객체가 생성될 수 있다.
이로 인해 싱글톤의 "유일한 인스턴스"라는 속성이 깨질 수 있다.
5. Airplane* newAir = airplane VS Airplane newAir = *airplane
전자는 포인터 복사 문법이고, 후자는 복사 생성자를 통한 복사문법이다.
위 코드를 실행하면 전자는 컴파일에러가 발생하지 않지만 후자는 컴파일에러가 발생한다.
이유는 복사생성자, 대입연산자를 삭제 또는 private으로 선언언했기 때문이다.
전자가 가능한 이유는 싱글톤의 유일성을 깨트리지 않는다는 점도 있다.
전자의 newAir는 airplane과 같은 주소를 사용하며 같은 메모리를 공유하기 때문에 싱글톤의 유일성을 깨트리지 않는다.
하지만 후자의 newAir는 다른 주소를 사용하며 같은 메모리를 공유하기 때문에 싱글톤의 유일성을 깨트린다.
전체 코드
#include <iostream>
using namespace std;
class Airplane {
private:
static Airplane* instance; // 유일한 비행기 객체를 가리킬 정적 포인터
// private 생성자: 외부에서 객체 생성 금지
Airplane() {};
public:
// 복사 생성자와 대입 연산자를 삭제하여 복사 방지
Airplane(const Airplane&) = delete;
Airplane& operator=(const Airplane&) = delete;
// 정적 메서드: 유일한 비행기 인스턴스를 반환
static Airplane* getInstance() {
if (instance == nullptr) {
instance = new Airplane();
}
return instance;
}
};
// 정적 멤버 초기화
Airplane* Airplane::instance = nullptr;
// 메인 함수 (사용 예시)
int main() {
// 유일한 비행기 인스턴스를 가져옴
Airplane* airplane = Airplane::getInstance();
// 또 다른 요청도 같은 인스턴스를 반환
Airplane* sameAirplane = Airplane::getInstance();
return 0;
}
'C++' 카테고리의 다른 글
CS) STL 기본구조 (0) | 2025.02.03 |
---|---|
CS) RandomEngine 구현하기 (1) | 2025.01.23 |
CS) 가상함수, 순수가상함수 (0) | 2025.01.07 |
CS) SOLID 원칙 (0) | 2025.01.07 |
CS) 스마트포인터 (0) | 2025.01.07 |