9. 커맨드 패턴 (Command)
요청 자체를 객체로 캡슐화하여 전달하고 실행하는 커맨드 패턴을 알아봅니다.
TV 리모컨의 1번 버튼은 ‘켜기’, 2번 버튼은 ’끄기’로 설정할 수 있죠? 리모컨은 그 버튼이 무슨 기능을 하는지 몰라도 누르기만 하면 됩니다. 이처럼 해야 할 일(명령)을 캡슐화해서 객체로 만들고, 나중에 실행할 수 있게 하는 것이 커맨드 패턴이에요.
(참고: 모든 명령은 '실행'할 수 있어야 해요)
[명령]을 규정하자:
<실행>이 있어야 한다 ()
[전등]을 설계하자:
<켜기>를 만들자 ():
"방에 불이 켜졌습니다! 밝다!"를 출력하자
<끄기>를 만들자 ():
"방에 불이 꺼졌습니다. 어둡다..."를 출력하자
(참고: 전등을 켜는 일 자체를 객체로 감쌌어요)
[명령]을 따르는 [불켜기명령]을 설계하자:
'전등'을 [전등]인 비어있음으로 정하여 숨기자
처음 만들어질 때 ([전등]인 '전등') 다음과 같이 하자:
'나'의 '전등'을 '전등'으로 정하자
<실행>을 만들자 ():
'나'의 '전등'의 <켜기>()를 실행하자
(참고: 리모컨은 어떤 기기인지 몰라도 그냥 명령을 실행만 해요)
[리모컨]을 설계하자:
'버튼들'을 [목록]인 []로 정하여 숨기자
<버튼추가>를 만들자 ([명령]인 '새명령'):
'나'의 '버튼들' 뒤에 '새명령'을 추가하자
<버튼누르기>를 만들자 ([숫자]인 '번호'):
'명령'을 [명령]인 '나'의 '버튼들'의 '번호'번째로 정하자
'명령'의 <실행>()을 실행하자
'거실등'을 [전등]인 새로운 [전등]()으로 정하자
'켜기버튼'을 [명령]인 새로운 [불켜기명령]('거실등')으로 정하자
'스마트리모컨'을 [리모컨]인 새로운 [리모컨]()으로 정하자
'스마트리모컨'의 <버튼추가>('켜기버튼')를 실행하자
'스마트리모컨'의 <버튼누르기>(1)를 실행하자