design pattern

디자인 패턴 정리 블로그

식피두 2020. 7. 28. 16:36

아래 블로그를 통해서 Python을 이용한 여러 가지 기본 디자인 패턴의 핵심에 대해 훑어볼 수 있다.

 

블로그 링크

 

실용적인 Python 디자인 패턴 정리

Mastering Python Design PatternsMastering Python Design Patterns 을 읽고 정리한 글입니다.

velog.io

거의 대부분은

알게모르게 이미 쓰고 있었던 패턴들..

디자인 패턴을 떠나서

중간중간에 나오는 파이썬에 특화된 문법들은 꼭 기억해둘만 하다!

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)

 

 

추가 참고자료

파이썬 코딩 도장: 36.6 추상 클래스 사용하기

파이썬 코딩 도장: 47.9 메타클래스 사용하기

Python의 metaclasses(메타클래스) 이해하기