Java/Java 객체지향 디자인 패턴

[Java 객체 지향 디자인 패턴] 8. 커맨드 패턴 - Command Pattern : 기능의 캡슐화

디벨로펄 2022. 3. 17.
반응형

커맨드 패턴

커맨드 패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다.

 

커맨드 패턴은 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자(Invoker) 클래스와 실제 기능을 실행하는 수신자(Receiver)클래스 사이의 의존성을 제거한다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있게 해준다.

 

 

커맨드 패턴 컬래보레이션

- Command : 실행될 기능에 대한 인터페이스. 실행될 기능을 execute메서드로 선언함.

- ConcreteCommand : 실제로 실행되는 기능 구현. 즉, Command라는 인터페이스 구현함. - Receiver를 Attribute으로 가지고 있음.

- Invoker : 기능의 실행을 요청하는 호출자 클래스 - Command를 Attribute으로 가지고 있음.

- Receiver : ConcreteCommand에서 execute 메서드를 구현할 때 필요한 클래스. 즉, Concrete Command의 기능을 실행하기 위해 사용하는 수신자 클래스.

 

작동 순서

1) Client가 원하는 커맨드 객체 생성

2) Invoker 객체에 바인딩 : setCommand(wantedCommand)

3) Invoker객체에서는 바인딩된 커맨드 객체의 execute 호출

4) execute method는 Reciver객체의 action method를 호출하여 원하는 기능 실행.

 

 

 

바로 연습문제. ㅇ.ㅇ 짧구만 

1-1 클래스 다이어그램

1-2 실행 결과.

Power On

Mute On

Power Off

빈줄.

1-3 TwoButtonController 클래스 설계의 취약점을 OCP 측면에서 설명하라.

button1, 2에서 실행시키고자 하는 기능이 변경되거나 추가될 경우 TwoButtonController를 직접 수정해야한다. 예를 들어, TV가 아닌 스피커로 변경이 된다면, TwoButtonController 내부에 tv 대신 스피커 객체로 바꿔주고, button pressed에 따른 동작도 수정해주어야 하므로, Open Close Principle에 위배된다.

 

1-4 Command 패턴이용해서 설계 취약점 개선.

 

2번 연습 문제는 코드로 작성. 아래 git

 

https://github.com/dhdnjswnd/JavaObjectiveDesignPattern/tree/main/src/chapter8_commandPattern

 

GitHub - dhdnjswnd/JavaObjectiveDesignPattern: 자바 객체지향 디자인패턴 공부자료

자바 객체지향 디자인패턴 공부자료. Contribute to dhdnjswnd/JavaObjectiveDesignPattern development by creating an account on GitHub.

github.com

 

공부하는 책

 

JAVA 객체지향 디자인 패턴 - 교보문고

UML과 GoF 디자인 패턴 핵심 10가지로 배우는 | 이 책이 제시하는 핵심 내용객체지향 이론과 UML을 통해 GoF 디자인 패턴의 핵심 10가지를 배운다.이 책의 특징과 장점5단계 학습법으로 디자인 패턴을

www.kyobobook.co.kr

 

반응형

댓글