Last updated
Last updated
์ปค๋งจ๋ ํจํด์ ์ด๋ฆ ๊ทธ๋๋ก ์ฌ๋ฌ ๊ฐ์ง ๋ช ๋ น(์์ฒญ)์ด ํธ์ถ๋๋ ํ๋ก๊ทธ๋จ ์ค๊ณ๋ฅผ ์ํด ์ฌ์ฉ๋๋ค. ์์ฒญ์ ๋ฐ๋ ๊ฐ์ฒด๋ค์ ๊ทธ๋ฃนํํ์ฌ ๋คํ์ฑ(์๋)์ ์ ์ฉํ๊ณ , ํธ์ถํ์ ๋ ์ง์ ๋ ์ปค๋งจ๋๋ฅผ ์คํํ๋๋ก ํ๋ค.
์ปค๋งจ๋ ํจํด์ ์ด์ฉํ๋ฉด, ์ปค๋งจ๋ ํธ์ถ์ ์์ฒญํ๋ ํด๋์ค์ ๋ณ๊ฒฝ ์์ด ์ปค๋งจ๋๋ฅผ ํ์ฅ/์์ ํ ์ ์๋๋ก ์ค๊ณํ ์ ์์์ ๋ฌผ๋ก ์ด๊ณ , ์๋์ ๊ฐ์ ๋ถ๋ถ์์ ์ฅ์ ์ ๊ฐ๋๋ค.
๊ฐ์ฒด์ action์ ๋์ ์ผ๋ก ์ค์ ํ ์ ์๋ค. (์ฐธ์กฐํ๋ Command ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์จ)
์์ ์ ์ํ์ ์์ฒญํ ์์ (Invoker ํธ์ถ)๊ณผ ์ํ๋๋ ์์ (Command ํธ์ถ)์ ๋ถ๋ฆฌํ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ ๊ตฌํํ ๋์ ์ฉ์ดํ๋ค.
๋ค๋ก๊ฐ๊ธฐ(Undo) ๊ธฐ๋ฅ
System์ ์ํ ์ ๋ ๊ธฐ๋ก (Command ๊ฐ์ฒด๋ค์ด ์ํ๋ ๋๋ง๋ค ๊ธฐ๋ก์ ๋จ๊ธฐ๊ฒ ํ ์ ์์)
์ฌ๋ฌ ์ปค๋งจ๋ ํธ์ถ (์ปดํฌ์งํธ ํจํด์ ์ ์ฉํ MacroCommand ์ด์ฉ)
Invoker
- ์ปค๋งจ๋์ ์คํ์ ์์ฒญํ๋ ๊ฐ์ฒด
Command
- ์คํ๋ ๊ธฐ๋ฅ์ ๋ํ ์ธํฐํ์ด์ค
ConcreteCommand
- ์ค์ ๋ก ์คํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํด๋์ค
Receiver
- ์ปค๋งจ๋๊ฐ execute๋ฅผ ์คํํ๋ ๊ณผ์ ์์ ํ์ํ ํด๋์ค (optional)
Command์ execute๋ ๋จ์ํ receiver์ action์ ์ ๋ฐํ๋๋ก ๊ตฌํ๋ ์๋ ์๊ณ , receiver ํธ์ถ ์์ด ๋ด๋ถ์์ ๋ช ๋ น์ ์ฒ๋ฆฌํ๋๋ก ๊ตฌํ๋ ์๋ ์๋ค.
Client๋ Receiver๋ฅผ ์์ฑํ๊ณ , ConcreteCommand์ ์ด๋ฅผ ์ ๋ฌํ ๋ค ConcreteCommand๋ฅผ Invoker์ ์ ์ฅํ๋ ์ญํ ์ ์ํํ๋ค. ์ด๋ฅผ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.