Python의 싱글톤 디자인 패턴
- 데코레이터를 사용하여 Python에서 싱글톤 디자인 패턴 구현
- 기본 클래스를 사용하여 Python에서 싱글톤 디자인 패턴 구현
- 메타클래스를 사용하여 Python에서 싱글톤 디자인 패턴 구현
- 모듈을 사용하여 Python에서 싱글톤 디자인 패턴 구현
디자인 패턴은 문제를 해결하기 위한 일부 코드를 나타낼 수 있습니다. Singleton은 그러한 디자인 패턴 중 하나이며 Python에서 클래스의 다른 개체를 만들 수 있습니다.
이 패턴은 주어진 클래스의 하나의 객체만 제한합니다. Python에서 이 패턴을 시뮬레이션하는 몇 가지 방법이 있습니다.
데코레이터를 사용하여 Python에서 싱글톤 디자인 패턴 구현
Python의 데코레이터는 다른 함수와 객체를 인수로 받아 동작을 수정할 수 있는 함수입니다. 데코레이터를 사용하려면 @
기호를 사용합니다.
Singleton 디자인 패턴을 구현하는 데 사용할 수 있습니다.
다음 예를 참조하십시오.
def singleton_dec(class_):
instances = {}
def getinstance(*args, **kwargs):
if class_ not in instances:
instances[class_] = class_(*args, **kwargs)
return instances[class_]
return getinstance
@singleton_dec
class Sample:
def __init__(self):
print("Object created.")
x = Sample()
y = Sample()
print(x, y)
출력:
Object created.
<__main__.Sample object at 0x0000015E72D3CA48> <__main__.Sample object at 0x0000015E72D3CA48>
위의 예에서 전체 클래스를 인수로 사용하는 데코레이터를 만들었습니다. 이 데코레이터를 사용하면 x
와 y
의 위치로 확인할 수 있는 Singleton 개체를 구현할 수 있습니다.
Singleton에 데코레이터를 사용할 때의 단점은 Sample
최종 클래스가 함수가 되어 클래스 메서드를 사용할 수 없다는 것입니다.
기본 클래스를 사용하여 Python에서 싱글톤 디자인 패턴 구현
기본 클래스는 다른 클래스를 파생시키는 특수 클래스입니다. 이 기본 클래스의 인스턴스가 생성되지 않습니다.
기본 클래스를 사용하여 Python에서 Singleton에 대한 구조를 제공할 수 있습니다.
예를 들어,
class Singleton_base(object):
_instance = None
def __new__(class_, *args, **kwargs):
if not isinstance(class_._instance, class_):
class_._instance = object.__new__(class_, *args, **kwargs)
return class_._instance
class Sample1(Singleton_base):
def __init__(self):
print("Object created.")
x = Sample1()
y = Sample1()
print(x, y)
출력:
Object created.
Object created.
<__main__.Sample object at 0x0000015E72D3F388> <__main__.Sample object at 0x0000015E72D3F388>
이것은 효과적인 방법입니다. 그러나 다중 상속으로 인해 여러 클래스가 관련된 경우 오류가 발생할 수 있습니다.
메타클래스를 사용하여 Python에서 싱글톤 디자인 패턴 구현
메타클래스는 클래스 객체의 동작을 정의할 수 있기 때문에 파이썬에서 매우 흥미로운 기능입니다. 수업을 위한 수업이라고 할 수 있습니다.
Python 2에서는 클래스에 __metaclass__
속성을 추가합니다. Python 3에서는 클래스의 인수로 추가할 수 있습니다.
이 기능을 사용하여 Python에서 Singleton 디자인을 구현할 수 있습니다.
예를 들어,
class Singleton_meta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton_meta, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class Sample(metaclass=Singleton_meta):
def __init__(self):
print("Object created.")
x = Sample()
y = Sample()
print(x, y)
출력:
Object created.
<__main__.Sample object at 0x0000015E72D3FF88> <__main__.Sample object at 0x0000015E72D3FF88>
이것은 메타 클래스의 적절한 적용이며 자동 상속을 달성합니다.
모듈을 사용하여 Python에서 싱글톤 디자인 패턴 구현
아마도 Python에서 Singleton의 가장 쉽고 기본적인 구현은 모듈을 사용하는 것입니다.
우리는 파이썬으로 모듈을 만들 수 있다는 것을 알고 있습니다. 기능만 포함된 모듈은 싱글톤 역할을 할 수 있으며, 이는 이러한 모든 기능을 모듈에 바인딩하기 때문입니다.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn