클래스의 인스턴스가 오직 하나만 생성되도록 보장하며, 전역 접근이 가능하게 하는 디자인 패턴입니다. 주로 글로벌 상태를 유지해야 하거나, 자원을 공유해야 하는 경우에 유용합니다. 대표적인 예로 로그 파일 관리 객체, 설정 객체, 데이터베이스 연결 객체 등이 있습니다.
new 메서드를 사용하는 싱글톤 패턴
class Singleton:
_instance = None # 인스턴스 저장을 위한 클래스 변수
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super().__new__(cls)
return cls._instance
# Example usage
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # True, 두 객체는 동일한 인스턴스입니다.
데코레이터를 사용한 싱글톤 패턴
def singleton(cls):
instances = {}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
@singleton
class Singleton:
pass
# Example usage
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # True