개발/Back-end
[Python] 싱글톤 패턴(Singleton Pattern)
맹수자두
2024. 6. 1. 09:50
싱글톤 패턴(Singleton Pattern)은 클래스의 인스턴스가 하나만 생성되도록 보장하고, 어디서든 그 인스턴스에 접근할 수 있도록 하는 디자인 패턴입니다. 싱글톤 패턴은 전역 변수를 사용하지 않고, 객체 지향적으로 전역적인 접근점을 제공하고자 할 때 유용합니다.
싱글톤 패턴을 사용하는 경우
- 공유 자원 관리: 데이터베이스 연결, 파일 핸들러, 로그 기록 등에서 하나의 인스턴스를 여러 곳에서 공유해야 할 때.
- 설정 관리: 애플리케이션 설정을 하나의 인스턴스로 관리하고 싶을 때.
- 상태 저장: 프로그램의 상태를 하나의 객체에서 유지하고 여러 곳에서 접근해야 할 때.
파이썬에서 싱글톤 패턴 구현 예제
파이썬에서는 다양한 방식으로 싱글톤 패턴을 구현할 수 있습니다. 여기에서는 가장 간단한 방법 중 하나인 클래스 변수를 이용한 방법을 소개합니다.
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
def __init__(self, value):
if not hasattr(self, 'initialized'): # __init__ is called each time an instance is created, so prevent reinitialization
self.value = value
self.initialized = True
# 싱글톤 인스턴스 생성
singleton1 = Singleton('First Instance')
print(singleton1.value) # 출력: First Instance
# 또 다른 싱글톤 인스턴스 생성 시도
singleton2 = Singleton('Second Instance')
print(singleton2.value) # 출력: First Instance
# 두 객체가 동일한 객체인지 확인
print(singleton1 is singleton2) # 출력: True
- '__new_' 메서드는 클래스의 인스턴스가 생성될 때 호출되며, 인스턴스를 생성하고 반환합니다.
- 'if not cls._instance:' 부분은 인스턴스가 이미 존재하는지를 체크합니다. 인스턴스가 없으면 'super(Singleton,cls).__new__(cls, *args, **kwargs)' 를 통해 인스턴스를 생성하고 '_instance'에 저장합니다.
- '__init__' 메서드는 인스턴스가 초기화될 때 호출되지만, 이미 초기화된 인스턴스의 경우에는 다시 초기화되지 않도록 'initialized' 속성을 체크합니다.
이렇게 하면 'Singleton' 클래스의 인스턴스는 항상 동일한 객체를 참조하게 되며, 어디서든 동일한 인스턴스를 사용하게 됩니다. 이 방법 외에도 메타클래스, 데코레이터, 모듈 자체를 이용한 방법 등이 있지만, 가장 기본적이고 이해하기 쉬운 방법은 클래스 변수를 이용한 방법입니다.
SingletonClass를 구현하는 다른방법
[Python] Metaclass를 이용한 Singleton Pattern 구현
파이썬에서 싱글톤 패턴을 구현하는 가장 효과적이고 효율적인 방법 중 하나는 메타클래스를 사용하는 것입니다. 메타클래스를 사용하면 싱글톤 패턴을 더 깔끔하게 구현할 수
tuu-lx.tistory.com
[Python] 데코레이터(Decorator)를 이용한 Singleton Pattern 구현
데코레이터를 사용하여 싱글톤 패턴을 구현할 수 있습니다. 데코레이터는 함수나 클래스를 감싸는 역할을 하기 때문에 싱글톤 인스턴스를 생성하고 관리하는 데 적합합니다.데코레이터를 사용
tuu-lx.tistory.com