객체가 상황에 따라 다르게 동작하도록 하는 방법, 여러 객체가 서로를 알지 못해도 통신할 수 있도록 하는 방법, 복잡한 구조에 대해 반복을 수행하는 방법을 배울 것이다.
객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴이다. 한 객체가 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하며 객체 사이의 결합도 최소화에 중점을 둔다. 패턴을 주로 클래스에 적용하는지 아니면 객체에 적용하는지에 따라 구분되는 패턴이다.
행동패턴에는 아래와 같은 디자인 패턴이 존재한다.
책임연쇄 패턴(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) : Ctrl + z 와 같은 undo 기능 개발할 때 유용한 디자인패턴. 클래스 설계 관점에서 객체의 정보를 저장한다.