Skip to content
난이도 출제 빈출문제은행 6

디자인 패턴: 행위 ​

행위 패턴(behavioral pattern)은 GoF(Gang of Four, 4인방) 디자인 패턴(design pattern) 가운데 객체들이 책임을 어떻게 나누고 서로 어떻게 소통할지를 다루는 11개다. 누가 요청을 처리할지, 상태가 바뀌면 누구에게 알릴지, 알고리즘의 어느 부분을 바꿔 끼울지를 정해 두어 객체 사이의 결합을 느슨하게 한다. 시험은 생성·구조 패턴(structural pattern)과 마찬가지로 설명을 주고 이름을 쓰게 하며, 11개로 가장 많아 자주 나온다. 생성·구조 패턴은 앞 문서에 있다.

행위 패턴 11개 ​

패턴한 줄 의도시험 단서
책임 연쇄(chain of responsibility)처리할 객체를 사슬로 이어 차례로 넘김고리, 다음 객체로 전달
커맨드(command)요청을 객체로 캡슐화(encapsulation)재실행·취소, 로그 저장
인터프리터(interpreter)언어의 문법을 클래스로 표현해 해석문법 표현, SQL·프로토콜
반복자(iterator)내부 구조를 드러내지 않고 차례로 접근동일 인터페이스로 순회
중재자(mediator)객체 간 상호작용을 한 객체에 모음중재, 결합도(coupling) 감소
메멘토(memento)객체 상태를 저장해 되돌림되돌리기, 스냅숏
옵서버(observer)상태 변화를 구독자들에게 자동 통지일대다 의존, 알림
상태(state)상태마다 다른 행위를 상태 객체로 분리상태에 따라 행위 변경
전략(strategy)알고리즘군을 캡슐화해 바꿔 끼움교체 가능한 알고리즘
템플릿 메서드(template method)상위가 뼈대, 하위가 세부 단계 구현골격 정의, 일부 재정의
방문자(visitor)구조는 그대로 두고 연산을 밖으로 분리새 연산 추가, 방문

반복자는 이터레이터, 중재자는 미디에이터, 방문자는 비지터로 영어 발음 그대로 쓰기도 한다. 어느 표기든 같은 패턴을 가리킨다.

헷갈리는 쌍 ​

상태와 전략 은 구조가 거의 같다. 둘 다 바뀌는 부분을 별도 객체로 빼서 교체한다. 차이는 누가 바꾸느냐다. 전략은 바깥이 알고리즘을 골라 넣고, 상태는 객체 스스로 내부 상태가 바뀌면서 행동이 달라진다.

중재자와 옵서버 는 둘 다 객체 사이를 느슨하게 한다. 중재자는 여러 객체가 서로 직접 부르지 않고 가운데 한 객체를 통해 대화하게 한다. 옵서버는 한 대상이 변하면 등록된 여러 구독자에게 알린다.

커맨드와 메멘토 는 모두 되돌리기와 엮인다. 커맨드는 요청(명령) 을 객체로 만들어 쌓아 두고, 메멘토는 상태 를 저장해 둔다.

코드로 보는 두 패턴 ​

템플릿 메서드는 상위 클래스가 순서를 고정하고 하위 클래스가 빈 단계를 채운다. 아래는 Java 21로 실행해 SCE가 출력되는 것을 확인했다.

java
abstract class Game {
    final void play() { System.out.print("S"); turn(); System.out.print("E"); }
    abstract void turn();
}
class Chess extends Game { void turn() { System.out.print("C"); } }
// new Chess().play(); → SCE

옵서버는 대상이 구독자 목록을 들고 있다가 값이 바뀌면 목록 순서대로 알린다. 구독자 A는 받은 값을 그대로, B는 받은 값의 두 배를 출력하도록 등록하고 3을 넣으면 A는 3을, B는 6을 차례로 출력해 A3B6이 나온다.

시험 포인트 ​

  • 행위 11개: 책임 연쇄·커맨드·인터프리터·반복자·중재자·메멘토·옵서버·상태·전략·템플릿 메서드·방문자.
  • "요청을 처리할 객체가 둘 이상, 못 하면 다음 객체로" → 책임 연쇄.
  • "요청을 객체로 캡슐화해 재이용·취소·로그" → 커맨드. "상태를 저장해 복원" → 메멘토.
  • "한 객체 상태 변화를 의존 객체들에 자동 통지" → 옵서버.
  • "상위가 골격, 하위가 세부" → 템플릿 메서드. "알고리즘 교체" → 전략.
  • "수많은 객체 간 상호작용을 한 객체로 캡슐화" → 중재자.
  • 인터프리터는 아키텍처 패턴(architecture pattern)에도 같은 이름이 있다. GoF 분류를 물으면 행위다.

관련 문서