頁面無法載入?點擊這裡可能會修復。
Placeholder

#5433
互動式

싱글톤(Singleton) 패턴 1s 32MB

問題

디자인 패턴이란 객체 지향 프로그래밍 설계시 자주 발생하는 문제들에 대한 해답으로 확장과 유지보수가 용이한 코드를 설계하기 위한 방법론이다.

 

이러한 디자인 패턴은 객체지향의 다섯가지 원칙인 SOLID 원칙을 따른다.

 

- Single Responsibility Principle (단일 책임 원칙)

: 하나의 객체는 반드시 하나의 기능만을 책임진다.

 

- Open-Closed Principle (개방-폐쇄 원칙)

: 변경에는 닫혀있고, 추가나 확장에는 열려있어야 한다.

 

- Liskov Substitution Principle (리스코프 치환 원칙)

: 자식 클래스는 부모 클래스에서 가능한 기능을 수행 가능해야한다.

 

- Dependency Inversion Principle (의존 역전 원칙)

: 의존 관계에서 변화하기 쉬운 것보다 어려운 것에 의존해야 한다.

 

- Interface Segregation Principle (인터페이스 분리 원칙)

: 객체는 자신이 이용하지 않는 메소드에 의존하지 않아야한다​ 

 

 

데이터베이스는 동시 요청의 충돌을 방지하기 위해 하나의 인스턴스를 사용한다.

DB의 일관성 유지를 위하여 동일한 내용물의 동일한 객체를 생성하게 되는데, 수만 번 반복하여 동일한 객체를 생성하고 삭제하는 작업은 시간/메모리 낭비이다.​

이러한 낭비를 막기 위해 한 번 할당하면 더이상 생성 및 삭제를 하지 않는 디자인 패턴이 싱글톤(Singleton) 패턴이다.

 

싱글톤 패턴은 클래스에 대한 단일 객체 생성, 전역 객체 제공, 그리고 공유된 리소스에 대한 동시 접근 제어 기능을 제공한다.​

 

아래 싱글톤 패턴 코드에서는 MyClass가 Singleton을 메타클래스로 상속받아 싱글톤 패턴 적용을 시켰다.

Singleton 클래스에서는 객체 생성 함수가 호출 될 때 마다 객체를 저장시키고, 이미 저장된 객체가 있다면 해당 객체를 내어준다.

 

class Singleton(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 MyClass(metaclass = Singleton):
    pass
 
a = MyClass()
b = MyClass()
print(a is b)

來源

klee

需要登入才能撰寫程式碼。