Observer Pattern

Observer Pattern (์˜ต์„œ๋ฒ„ ํŒจํ„ด)

ํด๋ž˜์Šค A์™€ B๊ฐ€ ์„œ๋กœ ํ†ต๋ณดํ•˜๊ณ  ํ†ต๋ณด๋ฐ›๋Š” ๊ด€๊ณ„๋ฅผ ๊ฐ€์กŒ๋‹ค๊ณ  ํ•˜์ž. A๋Š” B์—๊ฒŒ ํ†ต๋ณดํ•˜๊ธฐ ์œ„ํ•ด B๋ฅผ ์ฐธ์กฐํ•˜๊ณ  B๋Š” A์—๊ฒŒ ํ†ต๋ณด๋ฐ›๊ธฐ ์œ„ํ•ด A๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์–‘๋ฐฉํ–ฅ ๊ฒฐํ•ฉ์€ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ํ˜•์„ฑํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ํ†ต๋ณด๋ฐ›๋Š” ํด๋ž˜์Šค B๊ฐ€ ์ƒˆ๋กœ์šด ๋ฒ„์ „ C๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด A ๋˜ํ•œ B๊ฐ€ ์•„๋‹Œ C๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚œ๋‹ค. ์ด๋Š” OCP๋ฅผ ์œ„๋ฐฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ, ๋งŒ์•ฝ A๊ฐ€ B์™€ C์—๊ฒŒ ๋™์‹œ์— ํ†ต๋ณดํ•ด์•ผ ํ•œ๋‹ค๋ฉด? ๋” ๋งŽ์€ ๊ฐ์ฒด์— ํ†ต๋ณดํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด? ๊ทธ ๋•Œ๋งˆ๋‹ค A๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๊ณ , ๊ฐ ๊ฐ์ฒด๋ฅผ ์€๋‹‰ํ•˜์ง€ ์•Š์€ ์ฑ„ ๊ฐœ๊ฐœ์˜ ๊ฒƒ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ ๋˜ํ•œ ๋น„ํšจ์œจ์ ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ํ–‰์œ„ ํŒจํ„ด์ด ๋ฐ”๋กœ Observer Pattern(์˜ต์„œ๋ฒ„ ํŒจํ„ด)์ด๋‹ค.

Class Diagram

Observer-Class-Diagram
  • Subject - ์ž์‹ ์˜ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐ์ž์—๊ฒŒ ํ†ต๋ณดํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.

  • Observer - ๊ด€์ฐฐ์ž๋กœ, ์„œ๋ธŒ์ ํŠธ์˜ ๋ณ€ํ™”๋ฅผ ํ†ต๋ณด๋ฐ›๊ณ  ๋ณ€ํ™”๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค.

โ€ป Observer Pattern์„ ์ ์šฉํ•  ๋•Œ์—๋Š” ๊ฐ€๊ธ‰์  ์ฃผ์–ด์ง„ ๋ฉ”์„œ๋“œ๋ช…
(attach, detach, notify, update ๋“ฑ)์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ Observer Pattern์„ ์ ์šฉํ–ˆ์Œ์„ ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

State Diagram

Observer-Sequence-Diagram

์žฅ์ 

์„œ๋ธŒ์ ํŠธ๋Š” ๋‹จ์ง€ ๋‹จ์ผ ์˜ต์„œ๋ฒ„ ๋˜๋Š” ์˜ต์„œ๋ฒ„์˜ ๋ฆฌ์ŠคํŠธ๋งŒ์„ ๊ฐ€์งˆ ๋ฟ ํ•ด๋‹น ์˜ต์„œ๋ฒ„๊ฐ€ ๋ฌด์Šจ ์˜ต์„œ๋ฒ„์ธ์ง€๋Š” ๋ชจ๋ฅธ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ธŒ์ ํŠธ์™€ ์˜ต์„œ๋ฒ„๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝ, ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋‹ค. (๋А์Šจํ•œ ๊ฒฐํ•ฉ)

Last updated