파이썬 디자인 패턴 - 2. 싱글톤 디자인 패턴

 

관련 코드는 2장. 싱글톤 디자인 패턴를 참조


2장. 싱글톤(Singleton) 디자인 패턴

1. 싱글톤 디자인 패턴의 정의

글로벌하게 접근 가능한 하나의 객체를 제공하는 패턴


2. 싱글톤 디자인 패턴의 목적

  • 클래스에 대한 단일 객체 생성
  • 전역 객체 제공
  • 공유된 리소스에 대한 동시 접근 제어


3. 싱글톤 디자인 패턴의 특징

  • 스레드 풀과 캐시, 대화 상자, 레지스트리 설정 등 한 개의 객체만 필요한 경우 싱글톤 패턴을 사용하여 리소스를 관리
  • 전역 변수를 수정하면 종속된 모든 class에 의도하지 않은 영향을 줄 수 있음


4. 일반적인 구현 방법

import sqlite3


class MetaSingleton(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(MetaSingleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]

class Database(metaclass=MetaSingleton):
    connection = None
    def connect(self):
        if self.connection is None:
            self.connection = sqlite3.connect("db.sqlite3")
            self.cursorobj  = self.connection.cursor()
        return self.cursorobj


db1 = Database().connect()
db2 = Database().connect()

print("Database Objects DB1", db1)
print("Database Objects DB2", db2)