디자인 패턴(Design Pattern) 사용할 때의 장단점
☑️ 장점
- 개발자 간의 원활한 의사소통을 지원한다.
- 소프트웨어 구조 파악이 쉽다.
- 재사용을 통한 개발 시간을 단축할 수 잇다.
- 설계 변경 요청에 유연한 대처를 할 수 있다.
- 객체지향 설계 및 구현의 생산성을 높이는데 적합하다.
☑️ 단점
- 객체지향 설계/구현 위주로 사용된다.
- 초기 투자 비용 부담이 된다.
디자인 패턴의 구성 요소
🔸 GoF(Gangs of Four) 디자인 패턴
- 객체지향 설계 단계 중 재사용에 관한 유용한 설계를 디자인 패턴화하였다.
- 생성패턴, 구조 패턴, 행위 패턴으로 분류한다.
생성패턴
- 객체를 생성하는 것
- 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하도록 만들어주어 유연성을 높일 수 있고 코드를 유지하기가 쉬운 편이다
- 객체의 생성과 참조 과정을 추상화함으로써 시스템을 개발할 때 부담을 덜어준다.
🔸 Factory Method
- 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식
- Virtual-Constructor 패턴
🔸 Singleton
- 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 한다.
- 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴이다.
🔸 Prototype
- prototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조이다.
- 일반적인 방법으로 객체를 생성한다.
- 비용이 많이 소요되는 경우 주로 사용한다.
🔸 Builder
- 작게 분리된 인스턴스를 조리하듯 조합하여 객체를 생성한다.
🔸 Abstraction Factory(추상팩토리)
- 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다.
- 관련된 서브 클래스를 그룹지어 한 번에 교체할 수 있다.
구조패턴
- 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다.
- 복잡한 형태의 구조를 갖는 시스템을 개발하기 쉽게 만들어주는 패턴이다.
- 새로운 기능을 가진 복합 객체를 효과적으로 작성할 수 있다.
- 구성
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
행위 패턴
- 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의한다.
- 메시지 교환과 관련된 것으로, 객체 간의 행위나 알고리즘 등과 관련된 패턴을 말한다.
- 구성
- Chain of Responsibility(책임연쇄)
- Iterator(반복자)
- Command(명령)
- Interpreter(해석자)
- Memnto(기록)
- Observer(감시자)
- State(상태)
- Stratege(전략)
- Visitor(방문자)