책임연쇄 패턴(Chain of Responsibility)
: 책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 패턴.
커맨드 패턴(Command Pattern)
: 명령어를 각각 구현하는 것보다 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가
선택되어 실행되는 패턴.
인터프리터 패턴(Interpreter Pattern)
: 문법 규칙을 클래스화한 구조를 갖는 SQL 언어나 통신 프로토콜 같은 것을 개발할 때 사용하는 패턴.
반복자 패턴(Iterator Pattern)
: 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 메서드를 이요해 자료구조를
활용할 수 있도록 하는 패턴.
옵저버 패턴(Observer Pattern)
: 어떤 클래스에 변화가 일어났을 때, 다른 클래스에 통보하는 패턴.
전략 패턴(Strategy Pattern)
: 알고리즘 군을 정의하고 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용하는 패턴.
템플릿 메서드 패턴(Template Method Pattern)
: 상위 클래스에서 추상적으로 표현하고, 그 구체적인 내용은 하위 클래스에서 결정하는 패턴.
방문자 패턴(Visitor Pattern)
: 각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 visitor 클래스로 만들어두고
해당 클래스의 메서드가 각 클래스를 돌아다니면서 특정 작업을 수행하는 패턴.
중재자 패턴(Mediator Pattern)
: 클래스간의 복잡한 상호작용을 캡슐화하여 중간의 클래스에 위임해서 처리한다.
상태 패턴(State Pattern)
: 동일한 동작을 객체의 상태에 따라 다르게 처리할 때 사용하는 패턴.
메멘토 패턴(Memento Pattern)
: 클래스 설계 관점에서 특정 시점의 객체의 정보를 저장하는 패턴.


Invoker
: 해당 요청에 따르는 기능의 실행을 요청하는 호출자 클래스.
Command
: 실행될 기능에 대한 인터페이스. 실행되는 기능들을 종합하는 execute를 선언한다.
ConcreteCommand
: 실제로 실행되는 기능을 구현한다.
Receiver
: ConcreteCommand의 execute를 구현하는 클래스. 기능을 실행하기 위해 필요한 수신자 클래스.
Client
: 요청을 전달하는 클라이언트

AbstractExpression
: interpret()을 정의.
TerminalExpression
: interpret()을 구현.
NonTerminalExpression
: Non-Terminal의 interpret()을 구현.
Context
: String 표현식이여야 하며 인터프리터에 보내는 정보.
Client
: interpret()을 호출.

Iterator
: 순서대로 객체를 검색하는 인터페이스를 정한다.
ConcreteIterator
: Iterator에서의 인터페이스를 구현한다.
IterableCollection
: Iterator의 역할을 만드는 인터페이스를 정한다.
ConcreteCollection
: IterableCollection의 인터페이스를 구현한다.

Subscriber(Observer)
: 데이터의 변경을 통보 받는 인터페이스. Publisher에서 Subscriber의 update 메서드를 호출함으로써
Publisher의 데이터 변경을 ConcreteSubscribers에게 통보한다.
Publisher(Subject)
: ConcreteSubscribers를 관리.
ConcreteSubscribers(ConcreteObserver)
: Publisher의 변경을 통보받는 클래스.

Strategy
: 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시.
ConcreteStrategy
: Strategy에서 명시한 알고리즘을 실제로 구현한 클래스.
Context
: 전략 패턴을 이용하는 역할. 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 setter 메서드 제공.

Abstract Class
: 추상 클래스로 templateMethod를 정의한다.
Concrete Class
: 부모 클래스에서 abstract로 정의된 templateMethod를 구현한다.

Visitor
: 명령을 수행하기 위해 필요한 메소드를 정의하는 인터페이스.
ConcreteVisitor
: 명령을 수행하는 메소드를 구현.
Element
: Visit을 사용할 수 있는지 확인하는 accept 메소드를 정의하는 인터페이스
ConcreteElement
: Visitable에서 정의된 accept 메소드를 구현하며 Visitor 객체는 이 객체를 통하여 명령이 전달됨.

Mediator
: Component 객체간의 상호작용을 위한 인터페이스를 정의한다.
ConcreteMediator
: Mediator의 인터페이스를 구현하여 객체간의 상호작용을 조정한다.

Context
: 객체의 상태를 정의하는 데 사용되는 메소드를 정의하는 인터페이스.
State
: 상태에 따른 동작을 정의하는 인터페이스.
ConcreteState
: State에서 정의된 메소드를 구현하는 클래스.

Originator
: 객체의 상태를 저장한다. Memento 객체를 생성하며 후에 Memento를 사용하여 실행 취소를 할 수 있다.
Memento
: Originator의 상태를 유지하는 객체이다.(POJO)
Caretaker
: 복수의 Memento 상태를 유지해주는 객체이다.