SeouliteLab

[Python/파이썬] 싱글턴(Singleton) 패턴: 다양한 방법으로 구현하기 본문

프로그래밍

[Python/파이썬] 싱글턴(Singleton) 패턴: 다양한 방법으로 구현하기

Seoulite Lab 2024. 3. 2. 20:53

싱글턴 패턴은 어플리케이션 내에서 특정 클래스의 인스턴스가 하나만 생성되도록 보장하는 디자인 패턴입니다. Python에서는 여러 가지 방법으로 싱글턴을 구현할 수 있습니다. 이번 글에서는 세 가지 방법을 살펴보겠습니다.

1. 모듈을 이용한 싱글턴

파이썬의 모듈은 처음 가져올 때 한 번만 초기화되고 이후에는 메모리에 캐싱되므로 싱글턴을 간단하게 구현할 수 있습니다.

# singleton.py
class Singleton:
    def __init__(self):
        pass

singleton_instance = Singleton()

2. 데코레이터를 이용한 싱글턴

데코레이터를 사용하여 클래스를 싱글턴으로 만들 수 있습니다. 이를 위해 클래스를 감싸는 함수를 작성하고, 해당 함수에 데코레이터를 적용합니다.

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:
    def __init__(self):
        pass

3. 메타클래스를 이용한 싱글턴

메타클래스를 사용하여 클래스 생성 시에 싱글턴 패턴을 적용할 수 있습니다. 메타클래스는 클래스를 생성하는 클래스로, 클래스의 동작을 변경할 수 있습니다.

class SingletonMeta(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

class Singleton(metaclass=SingletonMeta):
    def __init__(self):
        pass

위의 세 가지 방법으로 Python에서 싱글턴 패턴을 구현할 수 있습니다. 각 방법은 다양한 상황에 맞게 선택하여 사용할 수 있습니다.