Python/Design Patterns

싱글턴(Singleton)

코닝구 2020. 9. 29. 18:04

디자인 패턴중에서 싱글턴(Singleton) 패턴에 대해서 알아보자.

기본 개념

싱글턴 패턴은 오래전부터  많이 알려지고 사용된 디자인 패턴중에 하나로 하나의 클래스에 인스턴스를 하나만 만들어야하는 경우 사용되는 패턴이다. 최초 생성 이후에 호출되는 생성자는 최초 인스턴스를 리턴한다.

싱글턴은 다음과 같은 상황에 사용된다.

  • 공유자원(shared resource)에 대한 동시접근(concorrenct access)을 제어할 필요가 있는 경우.
  • 여러 시스템에서 하나의 자원에 접근하는 지점이 필요한 경우.
  • 유일객체(unique object)가 필요한 경우.

일반적으로 싱글턴이 사용되는 예는 다음과 같다.

  • logging class.
  • print spooler.
  • DBCP(Dabasebase Connection Pool).
  • File Manager.
  • 전역 상태를 담고 있는 읽기 전용 싱글턴.

구현

class Singleton:
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__new__(cls)
        return cls.instance
 
a = Singleton()
b = Singleton()
print(a) #<__main__.Singleton object at 0x10d4d5278>
print(b) #<__main__.Singleton object at 0x10d4d5278>

같은 객체임을 알 수 있다.

'Python > Design Patterns' 카테고리의 다른 글

템플릿 메소드(Template Method)  (0) 2020.09.30
퍼사드(Facade)  (0) 2020.09.27
보그(Borg)  (0) 2020.09.27
데코레이터(Decorator)  (0) 2020.09.22