설명

먼저 위키백과의 설명을 한 번 보겠습니다.

클래스의 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하는 방식의 디자인 유형을 Singleton 패턴이라고 한다. (GoF 생성에 포함)

“위키백과 - Singleton Pattern

  • 위키백과의 설명처럼 특정 객체를 여러곳에서 공유하기 위해서 사용하는 방식입니다.
  • Python은 모듈 자체가 Singleton으로 구성되어있습니다.
    → 클래스 변수를 생성하면 해당 클래스의 객체가 생성된 어느 곳이던 같은 변수값이 반환됩니다.
  • Singleton은 다크 모드 같은 시스템 상의 공용 설정에 이용하면 좋을 것 같다고 생각이 들었습니다.

예시 코드

클래스 객체 생성시에 instance란 변수가 없으면 변수를 생성, 있으면 그냥 반환

# test_singleton.py

class Singleton():
    def __new__(cls):
        # instance 존재 여부 확인
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__new__(cls)
        return cls.instance

if __name__ == '__main__':
    single_1 = Singleton()
    print(f'1번 세팅 : {single_1}')
    single_2 = Singleton()
    print(f'2번 세팅 : {single_2}')

실행 결과

객체를 2번 생성시 최초 생성한 객체(1번)와 동일한 객체를 반환 받은 것을 확인할 수 있습니다.

Result