Shong Studio의 정보 창고

싱글톤(Singleton)패턴 - Cursor 예제로 한방에 이해하기 본문

프로그래밍 언어

싱글톤(Singleton)패턴 - Cursor 예제로 한방에 이해하기

Shong Studio 2024. 5. 29. 15:50
728x90
반응형

싱글톤(Singleton) 패턴은 클래스의 인스턴스가 하나만 존재하도록 보장하고, 그 인스턴스에 전역 접근을 제공하는 패턴입니다.
이를 통해 특정 클래스의 인스턴스를 하나로 제한할 수 있습니다.
C++에서 싱글톤 패턴을 구현하는 방법은 여러 가지가 있지만, 기본적인 구현 방식을 설명드리겠습니다.

다음은 Cursor 클래스를 싱글톤 패턴으로 구현하는 예제입니다:

#include <iostream>
#include <memory> // std::unique_ptr

class Cursor {
private:
    // 생성자를 private으로 선언하여 외부에서 인스턴스를 생성하지 못하게 함
    Cursor() {
        std::cout << "Cursor created\n";
    }

    // 복사 생성자와 대입 연산자를 삭제하여 복사 및 대입을 금지
    Cursor(const Cursor&) = delete;
    Cursor& operator=(const Cursor&) = delete;

public:
    // 정적 메서드를 통해 접근 가능한 유일한 인스턴스를 반환
    static Cursor& getInstance() {
        static Cursor instance;
        return instance;
    }

    // 필요한 메서드 추가
    void doSomething() {
        std::cout << "Doing something with the cursor\n";
    }
};

int main() {
    // Cursor c1; // 불가능: 생성자가 private으로 선언되어 있음
    // Cursor c2 = Cursor::getInstance(); // 불가능: 복사 생성자가 삭제됨

    Cursor& cursor1 = Cursor::getInstance();
    cursor1.doSomething();

    Cursor& cursor2 = Cursor::getInstance();
    cursor2.doSomething();

    // cursor1과 cursor2는 동일한 인스턴스를 참조함
    if (&cursor1 == &cursor2) {
        std::cout << "cursor1 and cursor2 are the same instance\n";
    }

    return 0;
}

설명

  1. private 생성자:

    • Cursor 클래스의 생성자를 private으로 선언하여 외부에서 직접 인스턴스를 생성할 수 없도록 합니다.
  2. 삭제된 복사 생성자와 대입 연산자:

    • Cursor 클래스의 복사 생성자와 대입 연산자를 delete 키워드로 삭제하여 클래스의 복사 및 대입을 금지합니다. 이를 통해 클래스의 인스턴스가 여러 개 생성되는 것을 방지합니다.
  3. 정적 메서드 getInstance:

    • getInstance 메서드는 Cursor 클래스의 유일한 인스턴스를 반환합니다. 이 메서드는 정적 메서드로 정의되어 있으므로 클래스의 인스턴스를 생성하지 않고도 호출할 수 있습니다.
    • static Cursor instance;는 함수 내에 정적 지역 변수를 선언하여 유일한 인스턴스를 생성하고, 이를 반환합니다. 이 정적 변수는 처음 호출될 때만 초기화되므로, 싱글톤 인스턴스가 한 번만 생성됩니다.
  4. 사용 예:

    • Cursor& cursor1 = Cursor::getInstance();를 통해 싱글톤 인스턴스에 접근합니다.
    • 여러 번 getInstance를 호출해도 동일한 인스턴스를 반환합니다.
    • cursor1cursor2가 동일한 인스턴스를 참조하는지 확인할 수 있습니다.

이 구현을 통해 Cursor 클래스는 애플리케이션 내에서 하나의 인스턴스만 존재하게 되며, 전역 접근을 제공합니다.

728x90
반응형

'프로그래밍 언어' 카테고리의 다른 글

C++ 람다식 다뤄보기  (0) 2024.05.29