싱글톤(Singleton) 패턴이란?
싱글톤 패턴은 클래스의 인스턴스가 오직 하나만 존재하도록 제한하는 디자인 패턴입니다. 이를 통해 동일한 객체가 코드의 여러 부분에서 항상 공유되며, 프로그램 전체에서 상태의 일관성을 유지할 수 있습니다.
실제 데이터가 싱글톤 클래스의 인터페이스 뒤에 숨겨져 있기 때문에, 싱글톤은 전역 변수보다 더 우아하고 안전한 대안으로 평가됩니다. 전역 변수처럼 어디서든 접근할 수 있으면서도 캡슐화라는 이점을 함께 얻을 수 있고, 네임스페이스 오염 문제도 피할 수 있기 때문입니다.
Python으로 싱글톤 클래스 구현하기
파이썬에서 싱글톤 클래스를 만드는 방법은 여러 가지가 있으며, 그중 __new__ 메서드를 오버라이드하는 방식이 대표적입니다. 다음 코드는 그중 하나의 예시입니다.
class Singleton(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 MyClass(Singleton, BaseClass):
pass이 방식의 특징
위 구현 방식의 가장 큰 장점은 진정한 클래스(true class)라는 점입니다. 즉, 단순한 모듈 수준의 객체가 아니라 일반 클래스처럼 상속이 가능하며, 다른 베이스 클래스(BaseClass)와 함께 다중 상속도 자연스럽게 활용할 수 있습니다.
또한 인스턴스 생성 로직이 클래스 내부에 캡슐화되어 있어 코드의 재사용성과 유지보수성이 뛰어나고, 이미 인스턴스가 존재하는 경우에는 기존 인스턴스를 그대로 반환하므로 중복 생성을 확실하게 방지할 수 있습니다.