디자인패턴

싱글톤 디자인 패턴 (파이썬)

주인장 아저씨 2021. 8. 17. 20:18

1. 싱글톤 디자인 패턴 기본

ㅇ 조건을 통해 동시요청의 충돌을 막음

ㅇ 싱글톤 패턴은 단 한개의 객체만을 허용하는 패턴

ㅇ 동일한 리소스에 대한 동시요청의 충동를 막기위해 사용

ㅇ 예를 들면. 객체가 있으면 반환 없으면 미반환 코드 수행

ㅇ 단점 :

   - 모든 클래스 간 상호관계가 복잡해짐

   - 전역 변수 수정이 의도치 않게 다른 클래스에도 영향을 줌

ㅇ 생성 패턴 : 객체가 생성되는 방식이 중요한거지 생성되는 세부 과정은 숨기고 객체 형태와 독립 구조 지원

 

예시 1)

2. 게으른 초기화

ㅇ 객체를 생성할 때 무조건 불러오는게 아니라, 조건을 부여해서 상황에 맞게 메소드 형태에서 객체를 생성하게끔 만듦ㅇ 싱글톤 패턴은 단 한 개의 객체만 생성

 

3. 모노스테이트 싱글톤 패턴

ㅇ 원래는 한 개의 클래스 객체만 존재해야 한다고 말함

ㅇ 하지만 '알렉스 마르텔리' 는 객체의 생성 여부보다는 상태가 더 중요하다고 말함

ㅇ 상태가 같다면 같은 상태를 공유할 수 있는 객체를 여러 개 만들 수 있다

 

4. 메타클래스 싱글톤 패턴

ㅇ 메타클래스는 클래스의 클래스

ㅇ 메타클래스 먼저 시행되고 일반 클래스 순서

ㅇ 일반 클래스에서 메타클래스를 생성하여 클래스를 재정의 할 수 있다.

ㅇ 메소드 오버라이드의 클래스 버전

ㅇ 객체를 생성하기 전에 싱글톤 패턴을 메타클레스화 시켜서 진행 가능

ㅇ call 메소드는 이미 존재하는 클래스의 객체를 생성할 때 호출하는 파이썬의 특수 메소드

ㅇ 메타클래스는 일반 클래스의 init과 new 메소드를 오버라이드함 (재정의 후 사용)

예제1)

예제2)

 

5. 싱글톤 패턴 적용 사례 1 (하나의 웹이 하나의 DB에 접속)

ㅇ 데이터베이스 기반 애플리케이션에서 싱슬톤 패턴을 적용한 사례

ㅇ 웹 앱이 DB 연산을 요청할 때마다 Database 클래스를 생성하지만 내부적으로는 한 개의 객체만 생성

ㅇ 따라서 데이터베이스의 동기화가 보장되고 리소스를 적게 사용해 메모리와 CPU의 사용량 최적화 가능

ㅇ 그러나 이 경우 각 웹이 DB에 접근하는 싱글톤을 생성하기 때문에 여러 웹을 동기화 할 경우 효율이 안좋음

 

6. 싱글톤 패턴 적용 사례2 (여러 웹이 같은 DB 접속)