디자인 패턴 개요 - Tirrilee/TechTalk GitHub Wiki
주의사항
디자인 패턴은 사용 목적, 장단점, 강점과 약점에 대한 충분한 이해와 패턴간의 융합에 발생할 수 있는 문제점들을 확실히 예상할 수 있어야 하며 이를 바탕으로 디자인 패턴을 적용해야한다. 무분별한 패턴의 남용은 오히려 프로그램을 망치게된다.
디자인 패턴
패턴은 목적과 형태에 따라 크게 생성 패턴, 구조 패턴, 행위 패턴 으로 나눈다. 이는 어떤 상황이며 어떤 패턴이 적용될 수 있는지 판단하는데 좋은 평가항목이 된다.
생성패턴
- Abstract Factory
동일한 주제의 다른 팩토리를 묶어 준다.
- Builder
생성(Construction)과 표기(representation)를 분리해 복잡한 객체를 생성한다.
- Factory Method
생성할 객체의 클래스를 국한하지 않고 객체를 생성한다.
- Prototype
기존 객체를 복제함으로 객체를 생성한다.
- Singleton
한 클래스에 한 객체만 존재하도록 제한한다.
구조패턴
- Adapter
인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧씌운다.
- Bridge
추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있다.
- Composite
0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있다.
- Decorator
기존 객체의 메서드에 새로운 행동을 추가하거나 오버라이드 할 수 있다.
- Facade
많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공한다.
- Flyweight
다수의 유사한 객체를 생성·조작하는 비용을 절감할 수 있다.
- Proxy
접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공한다.
행위패턴
- Chain of Responsibility
책임ㄷㄹ이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조
- Command
위의 명령어를 각각 구현하는 것보다는 위 그림처럼 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행하는 것
- Interpreter
문법 규칙을 클래스화한 구조를 갖는 SQL 언어나 통신 프로토롤 같은 것을 개발할 때 사용
- Iterator
반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 메서드를 이용해 자료구조를 활용할 수 있도록 해준다.
- Mediator
클래스간의 복잡한 상호작용을 캡슐화하여 한 클래스에 위임해서 처리하는 디자인 패턴
- Memento
Ctrl + Z 와 같은 undo 기능을 개발할 때 유용한 디자인 패턴, 클래스 설계 관점에서 객체의 정보를 저장한다.
- Observer
어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해주는 것
- State
동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용하는 디자인 패턴
- Strategy
알고리즘 군을 정의하고 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 해준다.
- Template Method
상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정되는 디자인 패턴
- Visitor
각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 visitor 클래스로 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 하는 것
https://cryptosan.github.io/pythondocuments/documents/patterns-in-python/