- Today
- Total
작심삼일
3주차-2. Singleton 본문
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
Singleton 패턴은 개념이 어렵지 않기 때문에 쉽게 이해할 수 있다.두가지 조건을 만족할 때 이 패턴을 사용한다.
1. 객체가 딱 한 개만 존재해야 하는 경우
2. 이 객체를 어디서든지 참조할 수 있도록 해야할 때 사용
그렇기 때문에 Singleton 패턴을 사용하면 처음 생성할 때만 메모리를 할당하기 때문에 메모리를 절약할 수 있고 데이터를 공유하기에도 용이하다.
하지만 그렇기 때문에 OCP 원칙(Open-Closed-Principle)을 어기게 된다는 단점이 있다.
어떻게 쓰는가
인스턴스가 유일해야 함을 보장하는 것이 이 패턴을 사용할 때 제일 중요한 부분이다.
class Singleton:
__instance = None
@classmethod
def __getInstance(cls):
if not cls.__instance:
cls.__instance = tempBlarBlar
return cls.__instance
어디서 활용되는가
이는 책의 내용 (p. 181)을 그대로 가져왔다.
1. 클래스의 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근점(access point)으로 모든 사용자가 접근할 수 있도록 해야할 때
2. 유일한 인스턴스가 서브클래싱으로 확장되어야 하며, 사용자는 코드의 수정없이 확장된 서브클래스의 인스턴스를 사용할 수 있어야 할 때
1,2번 모두 처음에 설명한 두가지 조건과 일치한다.
아래와 같이 Library를 쓸 때 주로 사용되는 것 같다.
tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-cased')
이를 응용해서 유일한 하나가 아니라 제한된 개수의 객체를 만들 수도 있다.
My Opinion
공부하면서 Singleton을 어디서 활용할 수 있을지가 제일 궁금했는데, library에서 주로 사용되는 것을 보니 감이 왔다. 이 패턴도 실제 작업할 때 종종 사용할 것 같다.
'스터디 > 디자인 패턴' 카테고리의 다른 글
4주차-2. Template Method (0) | 2021.05.13 |
---|---|
4주차-1. Prototype (0) | 2021.05.13 |
3주차-1. Factory Method (0) | 2021.04.30 |
2주차. Abstract Factory Pattern (추상 팩토리 패턴) (0) | 2021.04.22 |
1주차. 디자인 패턴이란? (0) | 2021.04.16 |