프로그램을 설계할 때 발생했던 문제점들을
객체 간의 상호 관계 등을 이용하여 해결할 수 있도록
하나의 규약형태로 만들어 놓은 것으로문제점을 해결한 경험을 재사용하기 위해
하나의 패턴으로 만들어 놓은 것을 말한다.
콘텍스트(Context) | 문제(Problem) | 해결(Solution) |
---|---|---|
패턴 적용이 가능한 상황
(문제가 발생할 수 있는 상황) |
설계적인 문제 & 이슈 | 문제를 해결할 수 있는 객체 간의 상호 관계 등 구체적이지 않은 방법 |
인스턴스(객체) 생성과 관련된 패턴
클래스의 구현과 조합을 캡슐화를 통해
특정 객체가 생성되거나 변경되어도
프로그램 구조에 영향을 크게 받지 않도록
유연성을 제공하는 패턴
더 큰 구조를 만들기 위한 패턴
객체들의 상호작용과 관련된 패턴
클래스 혹은 객체의 책임 분배, 기능 분리를 통해
객체들 사이의 의존성 및 결합성을 낮추는 패턴
클래스 간 상속 관계를 다루는 패턴
객체를 다루는 패턴
- Factory Method
인스턴스 객체 생성을 자식(서브)클래스에서 생성하도록 하는 패턴
- Abstract Factory
서로 관련이 있는 객체들을 묶어서 팩토리 클래스로 만드는 패턴
- Builder
복잡한 객체를 생성하는 클래스와
표현하는 클래스를 분리하여
서로 다른 표현도 같은 절차를 통해 생성할 수 있게 만드는 패턴
생성해야 하는 객체가 Optional할 때(선택지가 많을 때) 유리
- Prototype
객체 생성에 많은 비용과 시간이 들고
비슷한 객체가 이미 있는 경우
해당 객체를 복사해서 필요에 맞게 수정하는 패턴
- Singleton
인스턴스가 오직 1개만 생성되는 패턴
- 어댑터(Adapter) 패턴
어떠한 인터페이스를 사용할 수 없는 객체에
해당 인터페이스를 사용할 수 있는 어댑터 클래스를 만들어
사용 가능하게 하는 패턴
- 브릿지(Bridge) 패턴
구현부와 추상부를 분리하여
독립적으로 변형과 확장이 가능하게 하는 패턴
- 컴포지트(Composite) 패턴
객체들의 관계를 트리 구조로 구성하여
부분-전체 계층을 표현하는 패턴
사용자가 단일 객체와 복합 객체 모두
동일하게 다루도록 한다.
- 데코레이터(Decorator) 패턴
객체 결합을 통해서
기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴
- 퍼사드(Facade) 패턴
여러 기능들의 공통적인 기능을 정의하는
단순화된 상위 수준의 인터페이스를 정의하는 패턴
- 플라이웨이트(Flyweight) 패턴
인스턴스 한 개만을 가지고
여러 개의 가상 인스턴스를 제공하는 패턴
- 프록시(Proxy) 패턴
객체를 직접적으로 참조하는게 아니라
프록시 객체를 이용해 접근하는 패턴
- 인터프리터(Interpreter) 패턴
자주 등장하는 코드 규칙들을 간단한 언어로 정의하는 패턴
(ex. SQL 문법)
- 템플릿 메서드(Template Method) 패턴
어떠한 작업의 변경을 서브클래스로 캡슐화 해서
전체적인 구조를 바꾸지 않으면서 재정의하는 패턴
- 연쇄 책임(Chain of Responsibility) 패턴
어떠한 요청을 처리하는데 필요한 객체들을
집합(Chain)으로 만들어 느슨한 결합을 부여하는 패턴
- 명령(Command) 패턴
기능들을 캡슐화함으로써 여러 이벤트를 실행할 수 있는 패턴
- 반복자(Iterator) 패턴
반복자를 사용하여 요소에 접근하는 패턴
- 중재자(Mediator) 패턴
클래스 간의 관계들을 캡슐화하여
하나의 클래스에서 관리하도록 처리하는 패턴
- 메멘토(Memento) 패턴
객체의 상태 정보를 저장하고
사용자의 필요에 의해 원하는 시점에
데이터를 복원할 수 있는 패턴
- 옵저버(Observer) 패턴
어떤 객체의 상태가 변할 때
연관된 객체들에게 알림을 보내는 패턴
- 상태(State) 패턴
상태에 따라 달라지는 행위를
직접 호출하는 것이 아닌
상태를 객체화하여 상태가 행위를 할 수 있도록 위임하는 패턴
- 전략(Strategy) 패턴
객체가 할 수 있는 행위들을 전략 클래스로 생성하고
이 행위들을 캡슐화하는 인터페이스를 정의하여
동적으로 객체의 행위를 바꾸는 패턴
- 방문자(Visitor) 패턴
알고리즘을 객체에서 분리해서
객체에 방문하는 방문자에 따라 방문자에게 행위를 위임하여
구조는 변경하지 않은 채 새로운 행위를 추가할 수 있는 패턴