
싱글톤 패턴은 객체 생성에 대한 디자인 패턴 중 하나로 최초 한 번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다. 이를 통해 애플리케이션 전체에서 특정한 인스턴스를 공유하여 사용할 수 있다.
싱글톤 패턴을 구현하는 방법은 여러 가지가 있지만, 파이썬을 활용하는 대표적인 방법으로는 클래스 내부에 __new__ 메서드를 오버라이딩하여 인스턴스가 이미 생성되어 있는지 확인하고, 생성되어 있지 않은 경우에만 인스턴스를 생성하도록 구현한다. 이렇게 함으로써 최초 한 번의 인스턴스 생성 이후에는 이미 생성된 인스턴스를 반환하게 된다.
싱글톤 패턴은 전역 변수와 비슷한 개념으로, 애플리케이션 전체에서 해당 인스턴스를 공유하여 사용하게되므로 멀티스레드 구현 시 동시성 이슈가 발생할 수 있다.
class Singleton:
__instance = None
def __new__(cls, *args, **kwargs):
if cls.__instance is None:
cls.__instance = super().__new__(cls)
return cls.__instance
class MyClass(Singleton):
def __init__(self, value):
self.value = value
a = MyClass(1)
print(a.value) # 출력 결과: 1
b = MyClass(2)
print(a.value) # 출력 결과: 2
print(b.value) # 출력 결과: 2