행동 패턴 (Behavioral Pattern)

1. 문법 규칙을 클래스로 표현, Interpreter 패턴

(1) Interpreter 패턴의 개념 및 사용 목적

개념사용 목적
자주 등장하는 문제를 간단한 언어의 문법으로 정의하고 해석하여 재사용하는 행동 디자인 패턴– 자주 등장하는 패턴을 문법/언어로 정의
– 기존 코드 변경없이 새로운 표현 생성

(2) Interpreter 패턴의 클래스 다이어그램

(3) Interpreter 패턴의 구성요소

구성요소역할
AbstractionExpression상 구문 트리에 속한 모든 노드에 해당하는 클래스들이 공통으로 가져야 할 Interprete() 연산을 추상 연산으로 정의
TerminalExpression문법에 정의한 터미널 기호와 관련된 해석 방법 구현
NonterminalExpression문법에 나타나는 모든 기호에 대해서 클래스를 정의하고 터미널 기호가 아닌 모든 기호들에 대해서 Interprete() 연산을 구현
Context인터프리터가 구문 해석 하기위한 정보를 제공하여 번역기에 대한 포괄적인 정보를 포함

 

2. 하위 클래스에서 구체적 처리, Template method 패턴

(1) Template method 패턴의 개념 및 사용 목적

개념사용 목적
상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 구체적인 내용을 결정하는 행동 디자인 패턴– 구체적으로 처리할 클래스의 템플릿 제공
– 추상 메소드의 공통 알고리즘을 재사용

(2) Template method 패턴의 클래스 다이어그램

(3) Template method 패턴의 구성요소

구성요소역할
AbstractClass템플릿 메소드를 구현하며, 그 템플릿 메소드에서 사용할 추상 메소드 선언
ConcreteClassAbstractClass에서 정의된 추상 메소드를 구체적으로 구현

 

3. 책임 전가 구조, Chain of Responsibility 패턴

(1) Chain of Responsibility 패턴의 개념 및 사용 목적

개념사용 목적
객체 간 결합을 느슨하게 하기 위해 클라이언트로부터의 요청을 처리할 수 있는 처리 객체를 집합(Chain)으로 만들어 부여하는 행동 디자인 패턴– 객체 간 연계를 통해 처리 가능 객체 결정
– 객체 간 결합도를 낮추어 독립적으로 수행

(2) Chain of Responsibility 패턴의 클래스 다이어그램

(3) Chain of Responsibility 패턴의 구성요소

구성요소역할
Handler요구 처리 인터페이스를 정의하고 처리할 다음 객체 준비, 스스로 처리 불가 시 다음 객체로 연결
ConcreteHandler요청을 구체적으로 처리하며, 각 Handler는 요청에 따라 처리 혹은 체인 전달을 결정

 

4. 명령을 클래스로 표현, Command 패턴

(1) Command 패턴의 개념 및 사용 목적

개념사용 목적
요청을 요청에 대한 모든 정보가 포함된 독립실행형 객체로 변환하여 명령 객체 필요에 따라 처리하는 행동 디자인 패턴– 실행 기능 캡슐화로 여러 기능 실행 재사용성 확보
– 기능 수정/변경 시 클래스만 정의하여 유연한 확장성 제공

(2) Command 패턴의 클래스 다이어그램

(3) Command 패턴의 구성요소

구성요소역할
Command실행될 기능에 대한 인터페이스. 실행될 기능을 execute()로 정의
ConcreteCommand실행되는 기능을 구현하는 클래스. Receiver가 무엇을 처리해야 하는지(execute() 세부 구현) 정의
ReceiverConcreteCommand에서 execute()를 구현할 때 필요한 클래스. ConcreteCommand의 기능을 실행하기 위해 사용하는 수신자 클래스
Invoker기능의 실행을 요청하는 호출자 클래스. Client의 요청을 받아 Receiver의 액션을 호출

 

5. 반복 처리, Iterator 패턴

(1) Iterator 패턴의 개념 및 사용 목적

개념사용 목적
집합 내 모든 컬렉션(항목)에 대해 순서대로 전체를 검색하고 처리를 반복하는 행동 디자인 패턴– 구현 방법 노출 없이 모든 항목에 접근
– 내부 구현에 관계없이 객체에 접근, 반복 처리

(2) Iterator 패턴의 클래스 다이어그램

(3) Iterator 패턴의 구성요소

구성요소역할
Iterator컬렉션(항목)의 요소들을 순서대로 검색하기 위한 인터페이스를 선언
ConcreteIteratorIterator에서 컬렉션 순회를 위한 특정 알고리즘들을 구현
Aggregate여러 요소들로 구성된 컬렉션 인터페이스를 선언
ConcreteAggregateAggregate에서 인터페이스를 구현

 

6. 중재자를 통해 처리, Mediator 패턴

(1) Mediator 패턴의 개념 및 사용 목적

개념사용 목적
모든 객체간의 복잡한 상호작용을 캡슐화하고 하나의 클래스에 위임하여 처리하는 행위 디자인 패턴– 객체 관계 복잡도를 낮추어 유지보수 및 확장성 제공
– 객체간 상호작용을 중재자가 관리하여 느슨한 결합 유지

(2) Mediator 패턴의 클래스 다이어그램

(3) Mediator 패턴의 구성요소

구성요소역할
MediatorColleague 객체 간의 상호참조를 위한 인터페이스로 클라이언트 등록, 실행 등의 메소드 정의
ConcreteMediatorColleague 간의 상호참조를 조정하는 Mediator의 인터페이스 구현
Colleague다른 Colleague와의 상호참조를 위한 인터페이스로 Mediator와 통신하는 인터페이스 정의
ConcreteColleagueMediator를 통해 다른 Colleague와의 상호참조하는 Colleague 인터페이스 구현

 

7. 상태 저장/복원, Memento 패턴

(1) Memento 패턴의 개념 및 사용 목적

개념사용 목적
객체의 구현 세부 사항을 공개하지 않으면서 해당 객체의 이전 상태를 저장하고 복원할 수 있게 해주는 행동 디자인 패턴– undo, redo, history, snapshot 기능 제공
– 사용자가 원하는 시점의 데이터를 복원

(2) Memento 패턴의 클래스 다이어그램

(3) Memento 패턴의 구성요소

구성요소역할
Originator자신의 상태에 대한 스냅샷(Memento)을 생성할 수 있으며, 필요시 스냅샷에서 자신의 상태를 복원
MementoOriginator의 상태의 스냅샷 역할을 하는 값 객체, Memento는 불변으로 만든 후 생성자를 통해 데이터를 한 번만 전달
CareTakerMemento의 스택을 저장하여 Originator의 기록을 추적하며, 복원 시 최상단 Memento를 스택에서 가져와 Originator의 복원 메소드에 전달

 

8. 상태 변화 알림, Observer 패턴

(1) Observer 패턴의 개념 및 사용 목적

개념사용 목적
관찰 중인 객체에 발생하는 모든 이벤트에 대하여 알리는 구독 메커니즘을 정의하는 행동 디자인 패턴– 분산 이벤트 핸들링 시스템 구현 시 사용
이벤트 기반 아키텍처 등 외부 이벤트에 응답

(2) Observer 패턴의 클래스 다이어그램

(3) Observer 패턴의 구성요소

구성요소역할
ObserverSubject로부터 상태 변화를 전달받는 알림 인터페이스를 선언하며 대부분의 경우 단일 update 메소드로 구성
Subject관찰되는 대상으로, Observer를 등록하는 메소드와 삭제하는 메소드로 구성
ConcreteObserver구체적인 Observer로 update 메소드 호출 시 그 메소드 내 Subject의 현재 상태를 취득

 

9. 상태를 클래스로 표현, State 패턴

(1) State 패턴의 개념 및 사용 목적

개념사용 목적
객체의 내부 상태가 변경될 때 해당 객체가 그의 행동을 변경할 수 있도록 하는 행동 디자인 패턴– 상태를 클래스로 표현, 클래스 전환으로 상태 변화를 표현
– 유한 상태 기계(유한 오토마타)의 접근 방식을 객체에 적용

(2) State 패턴의 클래스 다이어그램

(3) Template method 패턴의 구성요소

구성요소역할
State상태를 나타내며, 상태마다 다르게 동작하여 상태에 의존한 동작을 하는 메소드 선언
ConcreteState구체적인 각각의 상태를 나타내며, State에서 선언된 메소드를 구체적으로 구현
Context현재 상태를 나타내는 ConcreteState를 가지며, State 패턴 사용자에게 필요한 인터페이스를 정의

 

10. 알고리즘 전환, Strategy 패턴

(1) Strategy 패턴의 개념 및 사용 목적

개념사용 목적
알고리즘의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그 객체들을 상호교환 하는 행동 디자인 패턴– 특정 작업을 다양한 방식(알고리즘)으로 수행
– 같은 문제를 다른 방법으로 쉽게 해결 지원

(2) Strategy 패턴의 클래스 다이어그램

(3) Strategy 패턴의 구성요소

구성요소역할
Strategy모든 ConcreteStrategy의 공통 부분이며, Context가 Strategy을 실행하는데 사용하는 메소드를 선언
ConcreteStrategyContext가 사용하는 알고리즘의 다양한 변형을 구현
ContextConcreteStrategy 중 하나에 대한 참조를 유지하고 Strategy 인터페이스를 통해서 이 객체와 통신

 

11. 데이터 구조와 처리를 분리, Visitor 패턴

(1) Visitor 패턴의 개념 및 사용 목적

개념사용 목적
구조를 수정하지 않고 신규 동작 추가를 위해 객체에서 데이터 구조와 처리를 분리하는 행동 디자인 패턴– 알고리즘 동작 객체에서 데이터 구조와 처리 분리
– 객체 구조 수정 없이 새로운 동작 추가

(2) Visitor 패턴의 클래스 다이어그램

(3) Visitor 패턴의 구성요소

구성요소역할
VisitorObjectStructure의 ConcreteElement를 인수들로 사용할 수 있는 Visitor 메소드 집합을 선언
ConcreteVisitor각 ConcreteElement 마다 작성된 같은 처리의 여러 버전을 구현
ElementVisitor가 방문할 곳을 나타내며, Visitor를 받아들이는 ‘accept’ 메소드를 선언
ConcreteElement반드시 accept 메소드를 구현하여 호출을 현재 Element 클래스에 해당하는 적절한 Visitor 메소드로 리다이렉트
ObjectStructureElement 집합을 다루며, ConcreteVisitor가 각 Element를 취급할 수 있는 메소드 보유

 

[참고]

  • 영진닷컴, JAVA 언어로 배우는 디자인 패턴 입문: 쉽게 배우는 GoF의 23가지 디자인 패턴

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^