목록Design Pattern/Structural (5)
Exist Technote

Proxy Pattern이란? 특정 타 객체로 접근하는 것을 통제하기 위해 해당 객체의 대리자 또는 자리채움자를 제공하는 패턴. 인터페이스를 변경하지 않으면서 기능을 추가하기 위해 사용되는 패턴. 예제 # RealSubject의 do_the_job의 기능으로 불만족스럽다. # RealSubject를 수정하지 않으면서 기능을 추가하고 싶다. class RealSubject: def do_the_job(self, user: str) -> None: print(f"{user}(이)가 작업을 수행합니다.") # 동일한 인터페이스를 지닌 클래스를 선언하여 (ABC를 선언하여 상속해도 되겠다.) class Proxy: def __init__(self) -> None: # has 관계로 소유하여 self._real_..

Facade Pattern이란? 서브 시스템의 인터페이스 집합에 대하여 하나의 통합된 인터페이스를 제공하는 패턴. 서브시스템을 좀 더 사용하기 편하게 만드는 상위 수준의 인터페이스를 정의한다. 예제 # https://github.com/faif/python-patterns/blob/master/patterns/structural/facade.py class CPU: def freeze(self): print("Freezing processor.") def jump(self, position): print("Jumping to:", position) def execute(self): print("Executing.") class Memory: def load(self, position, data): pri..

Flyweight Pattern이란? 크기가 작은 객체가 여러 개(엄~청...) 있을 때 공유를 통해 이들을 효율적으로 지원하는 패턴. 예제 import weakref class Card: # 매핑형, 참조 카운트를 증가시키지 않아 객체가 GC에 의해 제거되는 것을 막지 못한다. _pool = weakref.WeakValueDictionary() def __new__(cls, value, suit): obj = cls._pool.get(value + suit) if obj is None: obj = object.__new__(Card) obj.value, obj.suit = value, suit cls._pool[value + suit] = obj return obj def __repr__(self): ..

Composite Pattern이란? 객체들의 관계가 트리 구조(단일-복합)로 구성되어 있고 단일 객체와 복합 객체를 동일하게 다루어야 할 때 사용되는 패턴. 점->선->면(그리기, 지우기...), 파일->폴더(삭제, 이동...) 예제 from abc import ABC, abstractmethod # 복합객체와 단일객체가 동일하게 갖추어야 하는 인터페이스를 정의 class Tree(ABC): @abstractmethod def render(self): pass class Leaf(Tree): NUMBERING = 1 def __init__(self): self._number = self.NUMBERING self.__class__.NUMBERING += 1 def render(self, deep=0, ..

Adapter Pattern이란? 호환성이 없는 인터페이스 때문에 함게 동작할 수 없는 클래스들이 함께 작동하도록 하는 패턴. 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴. 이미 만들어진 라이브러리를 수정하지 않고 인터페이스를 정의하고 싶을 때 사용되는 패턴. 예제 # 다른 인터페이스들을 지닌 여러 클래스. class Dog: def __init__(self): self.name = "Dog" def bark(self): return "woof!" class Cat: def __init__(self): self.name = "Cat" def meow(self): return "meow!" class Human: def __init__(self): self.name = "Huma..