1. 디자인 패턴
- 디자인 패턴은 각 모듈의 세분화된 역할이나 모듈들 간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결방식 또는 예제를 말한다.
- GoF 디자인 패턴은 유형에 따라 생성 패턴(5개), 구조패턴(7개), 행위패턴(11개) 총 23개 패턴으로 구성된다.
2. 디자인 패턴 장단점
장점
- 범용적인 코딩스타일로 인해 구조파악이 용이하다.
- 객체지향 설계 및 구현의 생산성을 높여준다.
- 검증된 구조의 재사용을 통해 개발시간과 비용이 절약된다.
- 개발자 간 원활한 의사소통이 가능하다.
- 설계 변경 요청에 대한 유연한 대처가 가능하다.
단점
- 초기 투자비용이 부담될 수 있다.
- 객체지향을 기반으로 한 설계와 구현을 다루므로 다른 기반의 애플리케이션 개발에는 적합하지 않다.
3. 생성패턴 (추빌팩프싱)📌
- 생성패턴은 객체의 생성과 참조과정을 캡슐화하여 객체가 생성되거나 변경되어도 프로그램의 구조에 영향을 크게 받지 않도록 하여 프로그램에 유연성을 더해준다.
- 추상팩토리 : 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관, 의존하는 객체들의 그룹으로 생성하여 추상적으로 표현한다.
- 빌더 : 작게 분리된 인스턴스를 건축하듯이 조합하여 객체를 생성한다.
- 팩토리 메소드 : 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴. 가상생성자 패턴(Virtual Constroctor)이라도고도 불림
- 프로토타입 : 원본 객체를 복제하는 방법으로 객체를 생성하는 패턴.
- 싱글톤 : 생성된 객체를 어디서든 참조할 수 있지만, 여러프로세스가 동시에 참조할 수 없다. 즉, 클래스 내 인스턴스가 하나뿐임을 보장하며, 불필요한 낭비를 최소화 한다.
4. 구조패턴 (어브컴데퍼플프)📌
- 구조패턴은 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴이다. 연결과 관련된 단어로 구성되어있다(Point).
- 어댑터 : 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환해주는 패턴. 즉, 인터페이스가 일치하지 않을때 이용
- 브리지 : 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성하는 패턴
- 컴포지트 : 여러 객체를 가진 복합객체와 단일 객체를 구분 없이 다루고자 할때 사용하는 패턴
- 데코레이터 : 객체 간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴. 즉, 객체에 부가적인 기능 추가를 위해 다른 객체를 덧붙이는 방식.
- 퍼싸드 : 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할수 있도록 하는 패턴. 따라서 통합 인터페이스를 제공하는 Wraaper 객체가 필요.
- 플라이웨이트 : 인스턴스를 매번 생성하는 것이 아니라 가능한 한 공유하여 메모리를 절약하는 패턴.
- 프록시 : 접근이 어려운 객체(Point)와 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴.
5. 행위패턴 (책커인반중메옵상전템방) 📌
- 행위패턴은 하나의 객체로 수행할 수 없는 작업을 여러 객체로 분배하면서 결합도를 최소화 할 수 있도록 도와준다.
- 책임연쇄
- 커맨드
- 인터프리터
- 반복자
- 중재자
- 매멘토
- 옵서버
- 상태
- 전략
- 템플릿 메소드
- 방문자
추가내용 - 디자인패턴vs아키텍처 패턴
- 아키텍처 패턴이 상위설계에 이용된다.
- 아키텍처 패턴 : 시스템 전체구조를 설계하기 위한 참조모델
- 디자인 패턴 : 서브 시스템 내 컴포넌트와 그들 간의 관계를 구성하기 위한 참조모델