Post

Observer Pattern

Observer Pattern ์ •๋ฆฌ

์˜ต์ €๋ฒ„ ํŒจํ„ด์ด๋ž€?

ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด, ๊ทธ ๊ฐ์ฒด์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์—๊ฒŒ ์ƒํƒœ์˜ ๋ณ€ํ™”๋ฅผ ์•Œ๋ฆฌ๊ณ , ์ž๋™์œผ๋กœ ๋‚ด์šฉ์ด ๊ฐฑ์‹ ๋˜๋Š” ์ผ๋Œ€๋‹ค ์˜์กด์„ฑ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

์ž์„ธํ•˜๊ฒŒ ๋‚ด๋ถ€๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ž์‹ (subject)์—๊ฒŒ ์˜์กด์„ฑ์ด ์žˆ๋Š” ํด๋ž˜์Šค(observers)๋“ค์—๊ฒŒ ์ƒํƒœ์˜ ๋ณ€ํ™”๋ฅผ ์•Œ๋ฆด ์ˆ˜ ์žˆ๊ณ , ์˜์กด์„ฑ ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ์–ธ์ œ๋“  ๋“ฑ๋ก, ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ subject ํด๋ž˜์Šค๋Š” observer ํด๋ž˜์Šค๋ฅผ ๋ฃจ์ฆˆ ์ปคํ”Œ๋ง๊ฐ€๋Šฅํ•˜๋‹ค.

๋ชฉํ‘œ

Subject์˜ ๋ณ€ํ™”๋ฅผ ๊ตฌ๋…์ž(์˜ต์ €๋ฒ„)๋“ค์ด ์•Œ๊ฒŒํ•œ๋‹ค. ํ•˜์ง€๋งŒ Subject์ด Observer ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ๋ชจ๋ฅธ๋‹ค. ์ฆ‰ ์˜ต์ €๋ฒ„๋“ค์ด ์ฝ”๋“œ ๋ณ€ํ™”๊ฐ€ ์žˆ์–ด๋„, Subject๋Š” ์˜์กด์„ฑ์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.

Publisher ex) model : ์ƒํƒœ๊ฐ€ ๋ณ€ํ–ˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๋ฆผ(subscriber ์˜ ์กด์žฌ๋Š” ๋ชจ๋ฅด๊ณ , observer ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์•Ž)

Subscriber eX) view : ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋ฉด, ๊ฐ’์„ ์—…๋ฐ์ดํŠธ(publish์˜ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ์Œ)

Untitled.png

Subject๊ณผ Observer๋Š” ๋ชจ๋‘ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ž์‹ ์ด Subject์ด์ž Observer๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์‹ค์ œ์˜ˆ์‹œ

์„ค๊ณ„ํŒจํ„ด ๊ฐ•์˜์—์„œ ์ง„ํ–‰ํ•œ ์‹ค์ œ ์˜ˆ์‹œ์ด๋‹ค. ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ Observer๊ฐ€ ๋˜๊ณ , ๋‚ ์”จ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ชจ๋ธ(WeatherData)๊ฐ€ Subject์ด๋‹ค. ๋ณ€ํ™”๊ฐ€๋Šฅ์„ฑ์ด ๋งŽ์€ ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์˜ต์ €๋ฒ„๊ฐ€ ๋˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ๋””์Šคํ”Œ๋ ˆ์ด์— ๋Œ€ํ•œ ์˜์กด์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค.

Untitled.png

Update ๋ฐฉ์‹

  • Push(Subject โ†’ Observer)

ํ‘ธ์‹œ๋ฐฉ์‹์€ Subject์—์„œ ์ƒํƒœ๋ณ€ํ™”๋ฅผ ์•Œ๋ฆฌ๊ณ , update ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ๊ฐ’์„ ๋„˜๊ธฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ฆ‰ Subject์—์„œ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฐ’์— ์˜ํ•ด Observer๋Š” ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Pull(Observer โ†’ Subject)

ํ’€๋ฐฉ์‹์€ Subject์—์„œ ์ƒํƒœ์˜ ๋ณ€ํ™”๋ฅผ ์•Œ๋ฆฌ๋ฉด, ์˜ต์ €๋ฒ„๋Š” updateํ•จ์ˆ˜์—์„œ Subject์˜ getter ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ์›ํ•˜๋Š” ๊ฐ’์„ ์–ป์–ด๋‚ธ๋‹ค.

This post is licensed under CC BY 4.0 by the author.