요약
- 호출 캡슐화하기 : 커맨드 패턴
- 성풍기 테스트 코드
- 여러 동작을 한 번에 처리하기
- 매크로 커맨드 사용하기
- 커맨드 패턴 활용하기
- 커맨드 패턴 더 활용하기
- 디자인 도구상자 안에 들어가야 할 도구들
메모
선풍기 테스트 코드
- 0번 슬롯의 ON 버튼에 선풍기 속도를 MEDIUM로 설정
- 1번 슬롯의 ON 버튼에 선풍기 속도를 HIGH로 설정
- OFF 버튼에는 속도를 OFF 로 설정
선풍기 코드 테스트
여러 동작을 한 번에 처리하기
- 버튼 한 개만 눌러도 조명이 어두워지면서 오디오와 TV가 켜지고, DVD 모드로 변경되고, 욕조에 물이 채워지는 것까지 한 번에 처리했으면 좋겠다.
- 다른 커맨드를 실행할 수 있는 새로운 종류의 커맨드를 만들어서 여러 가지 커맨드를 한 번에 실행할 수 있음.
public class MacroCommand implements Command {
Command[] commands;
public MacroCommand(Command[] commands) {
this.commands = commands;
}
public void execute() {
for (int i = 0; i < commands.length; i++) {
commands[i].execute();
}
}
}
- 매크로를 실행하면 각 커맨드를 순서대로 실행함.
매크로 커맨드 사용하기
- 우선 매크로에 넣을 일련의 커맨드를 만듦.
- ON 커맨드와 OFF 커맨드용 배열을 하나씩 만들고 필요한 커맨드를 넣음.
- MacroCommand 객체를 버튼에 할당함.
- 버튼을 눌러보고 커맨드들이 제대로 동작하는지 확인함.
커맨드 패턴 활용하기
- 커맨드로 컴퓨테이션의 한 부분(리시버와 일련의 행동)을 패키지로 묶어 일급 객체 형태로 전달할 수 있음.
- 클라이언트 애플리케이션에서 커맨드 객체를 생성한 뒤, 오랜 시간이 지나도 그 컴퓨테이션을 호출할 수 있음.
- 다른 스레드에서도 호출할 수 있음.
- 이점을 활용해서 커맨드 패턴을 스케줄러나 스레드 풀, 작업 큐와 같은 다양한 작업에 적용할 수 있음.
- 작업 큐 클래스는 계산 작업을 하는 객체들과 완전히 분리되어 있음.
- 한 스레드가 한동안 금융 관련 계산을 처리하다가 잠시 후에 네트워크로 뭔가를 내려받을 수도 있음.
- 그럼에도 작업 큐 객체는 전혀 신경쓸 필요가 없음.
커맨드 패턴 더 활용하기
- 어떤 어플리케이션은 모든 행동을 기록해 두었다가 애플리케이션이 다운되었을 때 그 행동을 다시 복구할 수 있어야 함.
- 커맨드 패턴을 사용해서 store()와 load() 메소드를 추가해서 이 기능을 구현할 수 있음.
- 스프레드 시트의 경우, 매번 데이터가 변경될 때마다 디스크에 저장하지 않고, 특정 체크 포인트 이후의 모든 행동을 로그로 기록하는 방식으로 복구 시스템을 구축할 수 있음.
디자인 도구상자 안에 들어가야 할 도구들
- 커맨드 패턴
- 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있음.
- 이 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있음.