Command Pattern

Command Pattern (์ปค๋งจ๋“œ ํŒจํ„ด)

์ปค๋งจ๋“œ ํŒจํ„ด์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ช…๋ น(์š”์ฒญ)์ด ํ˜ธ์ถœ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ์š”์ฒญ์„ ๋ฐ›๋Š” ๊ฐ์ฒด๋“ค์„ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๋‹คํ˜•์„ฑ(์€๋‹‰)์„ ์ ์šฉํ•˜๊ณ , ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์ง€์ •๋œ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.

์ปค๋งจ๋“œ ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด, ์ปค๋งจ๋“œ ํ˜ธ์ถœ์„ ์š”์ฒญํ•˜๋Š” ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ ์—†์ด ์ปค๋งจ๋“œ๋ฅผ ํ™•์žฅ/์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Œ์€ ๋ฌผ๋ก ์ด๊ณ , ์•„๋ž˜์™€ ๊ฐ™์€ ๋ถ€๋ถ„์—์„œ ์žฅ์ ์„ ๊ฐ–๋Š”๋‹ค.

  1. ๊ฐ์ฒด์˜ action์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฐธ์กฐํ•˜๋Š” Command ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ)

  2. ์ž‘์—…์˜ ์ˆ˜ํ–‰์„ ์š”์ฒญํ•œ ์‹œ์ (Invoker ํ˜ธ์ถœ)๊ณผ ์ˆ˜ํ–‰๋˜๋Š” ์‹œ์ (Command ํ˜ธ์ถœ)์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  3. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ๊ตฌํ˜„ํ•  ๋•Œ์— ์šฉ์ดํ•˜๋‹ค.

    • ๋’ค๋กœ๊ฐ€๊ธฐ(Undo) ๊ธฐ๋Šฅ

    • System์˜ ์ˆ˜ํ–‰ ์ •๋„ ๊ธฐ๋ก (Command ๊ฐ์ฒด๋“ค์ด ์ˆ˜ํ–‰๋  ๋•Œ๋งˆ๋‹ค ๊ธฐ๋ก์„ ๋‚จ๊ธฐ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ)

    • ์—ฌ๋Ÿฌ ์ปค๋งจ๋“œ ํ˜ธ์ถœ (์ปดํฌ์ง€ํŠธ ํŒจํ„ด์„ ์ ์šฉํ•œ MacroCommand ์ด์šฉ)

๊ตฌ์„ฑ ์š”์†Œ

Command-Pattern
  • Invoker - ์ปค๋งจ๋“œ์˜ ์‹คํ–‰์„ ์š”์ฒญํ•˜๋Š” ๊ฐ์ฒด

  • Command - ์‹คํ–‰๋  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค

  • ConcreteCommand - ์‹ค์ œ๋กœ ์‹คํ–‰๋  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค

  • Receiver - ์ปค๋งจ๋“œ๊ฐ€ execute๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ํด๋ž˜์Šค (optional)

    • Command์˜ execute๋Š” ๋‹จ์ˆœํžˆ receiver์˜ action์„ ์œ ๋ฐœํ•˜๋„๋ก ๊ตฌํ˜„๋  ์ˆ˜๋„ ์žˆ๊ณ , receiver ํ˜ธ์ถœ ์—†์ด ๋‚ด๋ถ€์—์„œ ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌํ˜„๋  ์ˆ˜๋„ ์žˆ๋‹ค.

ํŠน์ง•

Client๋Š” Receiver๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ConcreteCommand์— ์ด๋ฅผ ์ „๋‹ฌํ•œ ๋’ค ConcreteCommand๋ฅผ Invoker์— ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋ฅผ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

Command-With-Client

Last updated