책너두 (헤드 퍼스트 디자인 패턴) 19일차 (~271p)

요약

  • 호출 캡슐화하기 : 커맨드 패턴
    • 성풍기 테스트 코드
    • 여러 동작을 한 번에 처리하기
    • 매크로 커맨드 사용하기
    • 커맨드 패턴 활용하기
    • 커맨드 패턴 더 활용하기
    • 디자인 도구상자 안에 들어가야 할 도구들

메모

선풍기 테스트 코드

  • 0번 슬롯의 ON 버튼에 선풍기 속도를 MEDIUM로 설정
  • 1번 슬롯의 ON 버튼에 선풍기 속도를 HIGH로 설정
  • OFF 버튼에는 속도를 OFF 로 설정

선풍기 코드 테스트

  • p258 참고

여러 동작을 한 번에 처리하기

  • 버튼 한 개만 눌러도 조명이 어두워지면서 오디오와 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();
        }
    }
}
  • 매크로를 실행하면 각 커맨드를 순서대로 실행함.

매크로 커맨드 사용하기

  1. 우선 매크로에 넣을 일련의 커맨드를 만듦.
  2. ON 커맨드와 OFF 커맨드용 배열을 하나씩 만들고 필요한 커맨드를 넣음.
  3. MacroCommand 객체를 버튼에 할당함.
  4. 버튼을 눌러보고 커맨드들이 제대로 동작하는지 확인함.

커맨드 패턴 활용하기

  • 커맨드로 컴퓨테이션의 한 부분(리시버와 일련의 행동)을 패키지로 묶어 일급 객체 형태로 전달할 수 있음.
    • 클라이언트 애플리케이션에서 커맨드 객체를 생성한 뒤, 오랜 시간이 지나도 그 컴퓨테이션을 호출할 수 있음.
    • 다른 스레드에서도 호출할 수 있음.
    • 이점을 활용해서 커맨드 패턴을 스케줄러나 스레드 풀, 작업 큐와 같은 다양한 작업에 적용할 수 있음.
      • 작업 큐 클래스는 계산 작업을 하는 객체들과 완전히 분리되어 있음.
      • 한 스레드가 한동안 금융 관련 계산을 처리하다가 잠시 후에 네트워크로 뭔가를 내려받을 수도 있음.
        • 그럼에도 작업 큐 객체는 전혀 신경쓸 필요가 없음.

커맨드 패턴 더 활용하기

  • 어떤 어플리케이션은 모든 행동을 기록해 두었다가 애플리케이션이 다운되었을 때 그 행동을 다시 복구할 수 있어야 함.
    • 커맨드 패턴을 사용해서 store()와 load() 메소드를 추가해서 이 기능을 구현할 수 있음.
  • 스프레드 시트의 경우, 매번 데이터가 변경될 때마다 디스크에 저장하지 않고, 특정 체크 포인트 이후의 모든 행동을 로그로 기록하는 방식으로 복구 시스템을 구축할 수 있음.

디자인 도구상자 안에 들어가야 할 도구들

  • 커맨드 패턴
    • 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있음.
    • 이 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있음.

댓글

Designed by JB FACTORY