Observer pattern

๊ฐœ๋…

ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ทธ ๊ฐ์ฒด์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“คํ•œํ…Œ ์—ฐ๋ฝ์ด ๊ฐ€๊ณ  ์ž๋™์œผ๋กœ ๋‚ด์šฉ์ด ๊ฐฑ์‹ ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ผ๋Œ€๋‹ค(one-to-many) ์˜์กด์„ฑ์„ ์ •์˜ํ•œ๋‹ค.

์ž๋ฐ” ๋‚ด์žฅ ์˜ต์ €๋ฒ„ ํŒจํ„ด ์‚ฌ์šฉ

java.util.Observer ์ธํ„ฐํŽ˜์ด์Šค์™€ java.util.Observable ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

  • ์ž๋ฐ” ๋‚ด์žฅ ์˜ต์ €๋ฒ„ ํŒจํ„ด์€ ํ‘ธ์‹œ ๋ฐฉ์‹, ํ’€ ๋ฐฉ์‹ ๋ชจ๋‘ ์‚ฌ์šฉ๊ฐ€๋Šฅ.

java.util.Observer ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  java.util.Observable ๊ฐ์ฒด์˜ addObserver() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ต์ €๋ฒ„ ๋ชฉ๋ก์— ์ถ”๊ฐ€๊ฐ€ ๋˜๊ณ  deleteObserver()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ต์ €๋ฒ„ ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐ๊ฐ€ ๋œ๋‹ค.

์—ฐ๋ฝ์„ ๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์€ java.util.Observable๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ฃผ์ œ ํด๋ž˜์Šค์—์„œ setChanged() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฆฐ ํ›„ notifyObservers() ๋˜๋Š” notifyObserver(Object arg) ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค. (์ธ์ž๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋Š” ํ‘ธ์‹œ๋ฐฉ์‹์œผ๋กœ ์“ฐ์ž„.)

์˜ต์ €๋ฒ„ ๊ฐ์ฒด๊ฐ€ ์—ฐ๋ฝ์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์€ update(Observable o, Object arg) ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. Observable o ์—๋Š” ์—ฐ๋ฝ์„ ๋ณด๋‚ด๋Š” ์ฃผ์ œ ๊ฐ์ฒด๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌ์ด ๋˜๊ณ  Object arg ์—๋Š” notifyObservers(Object arg) ๋ฉ”์†Œ๋“œ์—์„œ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๊ฐ€ ๋„˜์–ด์˜จ๋‹ค.

์ž๋ฐ” ๋‚ด์žฅ ์˜ต์ €๋ฒ„ ํŒจํ„ด์˜ ๋‹จ์ ๊ณผ ํ•œ๊ณ„

  1. Observable์€ ํด๋ž˜์Šค๋‹ค. ๋”ฐ๋ผ์„œ ์žฌ์‚ฌ์šฉ์„ฑ์— ์ œ์•ฝ์ด ์ƒ๊ธด๋‹ค.

    • ๋”ฐ๋ผ์„œ ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ๋ฌธ์ œ๋‹ค. ์ด๋ฏธ ๋‹ค๋ฅธ ์Šˆํผ ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์— Observable์˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์žฌ์‚ฌ์šฉ์„ฑ์— ์ œ์•ฝ์ด ์ƒ๊ธด๋‹ค.

  2. Observable ํด๋ž˜์Šค์˜ ํ•ต์‹ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

    • Observervable API๋ฅผ ์‚ดํŽด๋ณด๋ฉด, setChanged() ๋ฉ”์†Œ๋“œ๊ฐ€ protected๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋”ฐ.

    • Observable์˜ ์„œ๋ฒ„ํด๋ž˜์Šค์—์„œ๋งŒ setChanged()๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ตญ ์ง์ ‘ ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋ก, Observable์˜ ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์“ธ ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿฐ ๋””์ž์ธ์€ ์ƒ์†๋ณด๋‹ค๋Š” ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋””์ž์ธ ์›์น™์—๋„ ์œ„๋ฐฐ๋œ๋‹ค.

Last updated