아래 블로그를 통해서 Python을 이용한 여러 가지 기본 디자인 패턴의 핵심에 대해 훑어볼 수 있다.
거의 대부분은
알게모르게 이미 쓰고 있었던 패턴들..
디자인 패턴을 떠나서
중간중간에 나오는 파이썬에 특화된 문법들은 꼭 기억해둘만 하다!
Factory Pattern
- Factory Method ; 입력에 따라 객체 생성 방식이 달라질 때 (single step)
- Abstract Factory ; 입력되는 클래스 종류에 따라 행동이 달라짐
Builder Pattern
- builder ; 객체를 생성하는 multi step 각 과정을 정의
- director ; builder를 받아 객체를 생성
Prototype Pattern
- 기존의 객체를 복사(copy.deepcopy()) 해서 새로운 객체 생성
Singleton Pattern
- 클래스가 최대 하나의 인스턴스만 가지도록...
- python의 metaclass를 이용하면 인스턴스 생성을 제어할 수 있다!
Adapter Pattern
- 클라이언트가 기대하는 인터페이스에 맞추어 주기 위해 어댑터 클래스를 정의
- 호환성이 없을 때, 호환 가능하도록...
Decorator Pattern
- 함수의 기능을 확장
- 여러 프레임워크에서 함수의 기능을 확장하거나 제어할 때 자주 사용되는 기능
- python의 functools 를 이용하여 구현
Bridge Pattern
- 구현이 서로 다른 클래스의 오브젝트들을 동일한 인터페이스에 담아 통해 제공
- abc.ABCMeta 및 @abc.abstractmethod를 이용하여 구현
Facade Pattern
- 여러가지 클래스로 구성되어 복잡해지는 클래스의 경우,
- 하나의 Facade 클래스로 감싸서 클래스를 이용하는 클라이언트에게는 내부의 복잡함을 숨기고 간소화된 인터페이스를 제공
Flyweight Pattern
- 유사한 객체들 사이에 가능한 많은 메모리를 서로 공유하게 끔
- 클래스 내부에 객체 pool을 만들어서 특성을 공유하는 제한된 횟수만 생성하고, pool에 있는 객체를 재활용
- __new__(cls)메서드를 활용, class attribute(pool) 선언하여 생성된 객체를 담고, 꺼내어 활용
Proxy Pattern
- 뒤에 다른 무언가와 이어지는 인터페이스 역할을 하는 클래스를 둠
- 예를 들어 뒤에 가입 유저 목록을 관리하는 클래스가 있고, 프록시 클래스는 유저 접근 권한을 체크한다던지...
- server A에 있는 파일을 읽는 클래스를 가져다 server B에 있는 클라이언트가 사용할 수 있게 감싼다던지..
Observer Pattern
- 객체 내부에 해당 객체를 관찰하는 옵저버들의 목록을 등록해 놓고, 상태 변화가 있을 때마다 옵저버에게 알리는 패턴! 프론트엔드 프레임워크에서 자주 봄.
그 외에...
State Pattern (states, transitions)
Strategy Pattern
Microservices Pattern(retry, circuit breaker, cache-aside, throttling)
추가 참고자료