파이썬에서 싱글톤 구현하는 방법을 알아보자.
한 인스턴스만 생성해서 그것만 사용하고 싶을때 쓴다.
장점으로는 메모리 낭비 방지, 인스턴스를 전역적으로 쓸 수 있어 다른 코드에서 해당 싱글톤의 데이터를 공유할 수 있다는 점이다.
하지만 싱글톤 클래스에게 너무 많은 일을 위임하거나 데이터를 공유시키면 클래스 간의 결합도가 높아져 개방폐쇄원칙에 위배된다. 또, 멀티스레드 환경에서 문제가 발생할 수 있다.
결론적으로 꼭 필요한 경우에만 만들어 사용해야 한다.
싱글톤을 구현한 코드는 아래와 같다.
Singleton클래스를 상속받은 뒤 instance메서드를 써서 인스턴스를 얻으면 끝이다.
class Singleton:
__instance = None
@classmethod
def __getInstance(cls):
return cls.__instance
@classmethod
def instance(cls):
cls.__instance = cls()
cls.instance = cls.__getInstance
return cls.__instance
class MyClass(Singleton):
pass
print(MyClass.instance() == MyClass.instance())# True