목록Design Pattern/Behavioral (5)
Exist Technote

Template Method Pattern이란? 알고리즘의 뼈대만을 정의하고 각 단계에서 수행할 구체적 처리를 서브클래스로 미루는 패턴 활용 어떤 알고리즘의 단계 중 변하지 않는 부분을 한 번 정의하여 변하는 부분을 서브클래스에서 정의할 수 있도록 남기고자 할 때 사용할 수 있다. 서브클래스들의 인스턴스들이 공통적인 연산 알고리즘을 지닐 때 리팩토링을 목적으로 사용할 수 있다. 구조 faif # template_function에 필요한 getter들. (필수) def get_text(): return "plain-text" def get_pdf(): return "pdf" def get_csv(): return "csv" # template_function에 필요한 converter. (훅) def co..

State Pattern이란? 객체 내부의 상태에 따라 스스로 행동을 변경할 수 있게끔 허가하는 패턴. 마치 자신의 클래스를 바꾸는 것처럼 보이게 된다. 예제 변경 전의 라디오 클래스 class Radio: STATIONS = { "AM": ["1250", "1380", "1510"], "FM": ["81.3", "89.1", "103.9"] } def __init__(self): self.modulation = "AM" self.stations_point = 0 def toggle(self): if self.modulation == "AM": self.modulation = "FM" print("FM으로 전환") else: self.modulation == "AM" print("AM으로 전환") def..

Registry Pattern이란? 어떤 클래스의 모든 서브 클래스를 참조하고 싶을 때 사용할 수 있는 패턴 예제 원본 커스텀 # 메타클래스 정의(클래스를 생성하는 클래스) class RegistryMetaClass(type): def __new__(cls, name, bases, attrs): # 클래스를 생성한다. new_cls = type.__new__(cls, name, bases, attrs) # 클래스의 속성에 REGISTRY가 있다면 # bases 내에 RegistryMetaClass를 메타 클래스로 활용한 슈퍼 클래스가 있다는 의미로 간주하여 if hasattr(new_cls, "REGISTRY"): # (다중 상속에도 원하는 방식으로 동작하도록) for base in bases: if h..

Chaining Method란? 메서드가 객체를 반환하여 연쇄적으로 메소드를 이어 동작시킬 수 있는 패턴. 예제 원펀맨 훈련법 class Person: def __init__(self, start=None, end=None): self.actions = [] def traning(self, action:str): self.actions.append(action) return self @property def schedule(self): return "\n".join(self.actions) saitama = Person() # 원하는 만큼 다양한 traning을 추가할 수 있다. # 또한 체이닝만 구현한다면 다른 객체의 메서드 체인으로 넘어갈 수도 있다. saitama\ .traning("푸쉬업 100회..

Observer Pattern이란? 감시자 패턴. 객체들 사이에 일대 다의 의존 관계를 정의하여, 일 객체의 상태가 변할 때 다 객체들이 변화를 통지받아 동작을 수행할 수 있게 만드는 패턴. 구독-발행 패턴과 유사점이 많다. 예제 from contextlib import suppress # 옵저버들을 관리하는 객체 subject. 확장할 수 있도록 설계된 구조가 멋지다. class Subject: # 옵저버를 추가 or 제거 def __init__(self) -> None: self._observers = [] def attach(self, observer) -> None: if observer not in self._observers: self._observers.append(observer) def ..