PHpullh

PYTHON · 객체지향

싱글톤 패턴

싱글톤 패턴으로 클래스의 인스턴스를 하나만 존재하게 보장합니다. Python에서의 다양한 구현 방법을 비교합니다.

객체지향고급singleton싱글톤__new__디자인패턴

핵심 설명

싱글톤 패턴으로 클래스의 인스턴스를 하나만 존재하게 보장합니다. Python에서의 다양한 구현 방법을 비교합니다.

Python code

# 방법 1: __new__ 오버라이드
class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

s1 = Singleton()
s2 = Singleton()
print(s1 is s2)  # True

# 방법 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 Database:
    def __init__(self, url="localhost"):
        self.url = url
        print(f"DB 연결: {url}")

db1 = Database("server1")
db2 = Database("server2")  # __init__ 호출 안 됨
print(db1 is db2)  # True
print(db1.url)     # server1

# 방법 3: 모듈 수준 인스턴스 (가장 Pythonic)
# config.py에 _config = Config() 하나만 생성
# 다른 모듈에서 from config import _config

학습 팁

Python에서 가장 간단한 싱글톤은 모듈 수준 변수입니다. 모듈은 한 번만 import됩니다.

주의할 점

싱글톤은 전역 상태를 만들어 테스트를 어렵게 합니다. 의존성 주입을 먼저 고려하세요.

자주 묻는 질문

싱글톤 패턴란 무엇인가요?

싱글톤 패턴으로 클래스의 인스턴스를 하나만 존재하게 보장합니다. Python에서의 다양한 구현 방법을 비교합니다.

싱글톤 패턴 학습 시 주의할 점은 무엇인가요?

싱글톤은 전역 상태를 만들어 테스트를 어렵게 합니다. 의존성 주입을 먼저 고려하세요.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.