소프트웨어 설계
시 자주 발생하는 문제들을 해결하기 위해 고안된 해결책
모듈의 세분화된 역할
이나 모듈들 간의 인터페이스 구현 방식
을 설계할때 참조할 수 있는 전형적인 해결 방식
상황에 맞는 최적 패턴을 결정해서 사용하는 것이 바람직
아키텍쳐 패턴은 디자인 패턴보다 상위 수준의 설계에 사용된다.
아키텍쳐 패턴이
전체 시스템의 구조를 설계하기 위한 참조 모델이라면, 디자인 패턴
은 서브시스템에 속하는 컴포넌트들끼리의 관계를 설계하기 위한 참조 모델이다.
컴포넌트
: 재사용이 가능한 독립된 모듈
모듈
: 패키지의 상위 개념(패키지 모음), 하나의 완전한 기능 수행
생성 패턴
: 객체의 생성에 사용되는 패턴으로, 객체를 수정해도 호출부가 영향받지 않도록 함
구조 패턴
: 객체를 조합해서 더 큰 구조를 만드는 경우
행위 패턴
: 객체 간의 알고리즘이나 책임 분배에 관한 패턴
-> 객체 하나로는 수행할 수 없는 작업을 여러 객체를 이용하여 분배하는데 이때 결합도를 최소화 해야 함
Factory Method
: 객체 생성을 서브클래스로 분리해서 위임하는 패턴
Abstract Factory
: 구체적은 클래스를 지정하지 않고 상황에 맞는 객체를 생성하기 위해 인터페이스를 제공하는 패턴
Builder
: 객세의 생성과 표현을 분리해 객체를 생성하는 패턴
ProtoType
: 원본 객체를 복사 해 객체를 생성하는 패턴
Singelton
: 한 클래스마다 인스턴스를 하나만 생성해서 인스턴스가 하나임을 보장하고 어느곳에서도 접근할 수 있게 제공하는 패턴
Adapter
: 클래스의 인터페이스를 의도하는 인터페이스로 변환하는 패턴
Bridge
: 추상화와 구현을 분리해서 각각 독립적으로 변형케 하는 패턴
Composite
: 여러 객체로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없디 다루는 패턴
Decorator
: 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 하는 패턴
Facade
: 서브시스템의 인터페이스 집합들에 하나의 통합된 인터페이스를 제공하는 패턴
Flyweight
: 특정 클래스의 인스턴스 한 개를 가지고 여러 개의 가상 인터스를 제공할 때 사용하는 패턴
Proxy
: 특정 객체를 직접 참조하지 않고 해당 객체를 대행(프락시)하는 객체를 통해 접근 하는 패턴
Interpreter
: 주어진 언어의 문법을 위한 표현 수단을 정의하고 해당 언어로 구성된 문장을 해석하는 패턴
Template Method
: 일정 작업을 처리하는 부분을 서브클래스로 캡슐화해서 전체 수행 구조는 바꾸지 않으면서 특정 단게만 변경해서 수행하는 패턴
Chain of Responsbility
: 요청 처리 객체를 집합으로 만들어 결합을 느슨하게 만드는 패턴
Command
: 실행될 기능을 캡슐화해서 주어진 여러 기능을 실행하도로고 클래스를 설계하는 패턴
Iterator
: 내부 구조를 노출하지 않으면서 해당 객체의 집합 원소에 순차적으로 접근하는 방법을 제공하는 패턴
Mediator
: 한 집합에 속한 객체들의 상호작용을 캡슐화하는 객체를 정의한 패턴
Memento
: 객체의 상태 정보를 저장하고 필요에 따라 상태를 복원하는 패턴
Observer
: 객체의 상태 변화를 관찰하는 관찰자, 즉 옵저버 목록을 객체에 등록해 상태가 변할때 마다 메서드 등을 통해 객체가 직접 옵저버에게 통지하게 하는 디자인 패턴
State
: 상태에 따라 객체가 행동을 변경하게 하는 패턴
Strategy
: 행동을 클래스로 캡슐화해서 동적으로 행동을 바꿀수 있게 하는 패턴
Visitor
: 실제 로직을 가지고 있는 객체(visitor)가 로직을 적용할 객체(element)를 방문하여 실행하는 패턴