Observer Pattern
Observer Pattern ์ ๋ฆฌ
์ต์ ๋ฒ ํจํด์ด๋?
ํ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ฐ๋๋ฉด, ๊ทธ ๊ฐ์ฒด์ ์์กดํ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์๊ฒ ์ํ์ ๋ณํ๋ฅผ ์๋ฆฌ๊ณ , ์๋์ผ๋ก ๋ด์ฉ์ด ๊ฐฑ์ ๋๋ ์ผ๋๋ค ์์กด์ฑ ๋์์ธ ํจํด์ด๋ค.
์์ธํ๊ฒ ๋ด๋ถ๊ตฌ์กฐ๋ฅผ ์์๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ์์ (subject)์๊ฒ ์์กด์ฑ์ด ์๋ ํด๋์ค(observers)๋ค์๊ฒ ์ํ์ ๋ณํ๋ฅผ ์๋ฆด ์ ์๊ณ , ์์กด์ฑ ์๋ ํด๋์ค๋ฅผ ์ธ์ ๋ ๋ฑ๋ก, ์ทจ์ํ ์ ์๋ค. ์ฆ subject ํด๋์ค๋ observer ํด๋์ค๋ฅผ ๋ฃจ์ฆ ์ปคํ๋ง๊ฐ๋ฅํ๋ค.
๋ชฉํ
Subject์ ๋ณํ๋ฅผ ๊ตฌ๋ ์(์ต์ ๋ฒ)๋ค์ด ์๊ฒํ๋ค. ํ์ง๋ง Subject์ด Observer ์ธ์คํด์ค์ ๋ํด ๋ชจ๋ฅธ๋ค. ์ฆ ์ต์ ๋ฒ๋ค์ด ์ฝ๋ ๋ณํ๊ฐ ์์ด๋, Subject๋ ์์กด์ฑ์ ๊ฐ์ง ์๋๋ค.
Publisher ex) model : ์ํ๊ฐ ๋ณํ๋ค๋ ๊ฒ๋ง ์๋ฆผ(subscriber ์ ์กด์ฌ๋ ๋ชจ๋ฅด๊ณ , observer ์ธํฐํ์ด์ค๋ง ์)
Subscriber eX) view : ์ํ๊ฐ ๋ณํ๋ฉด, ๊ฐ์ ์ ๋ฐ์ดํธ(publish์ ์ ๋ณด๋ฅผ ์๊ณ ์์)
Subject๊ณผ Observer๋ ๋ชจ๋ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์, ์์ ์ด Subject์ด์ Observer๊ฐ ๋ ์ ์๋ค.
์ค์ ์์
์ค๊ณํจํด ๊ฐ์์์ ์งํํ ์ค์ ์์์ด๋ค. ๋์คํ๋ ์ด๊ฐ Observer๊ฐ ๋๊ณ , ๋ ์จ๊ด๋ จ ๋ฐ์ดํฐ๋ชจ๋ธ(WeatherData)๊ฐ Subject์ด๋ค. ๋ณํ๊ฐ๋ฅ์ฑ์ด ๋ง์ ๋์คํ๋ ์ด๊ฐ ์ต์ ๋ฒ๊ฐ ๋๋ฉด์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋์คํ๋ ์ด์ ๋ํ ์์กด์ฑ์ด ๋ฎ์์ง๋ค.
Update ๋ฐฉ์
- Push(Subject โ Observer)
ํธ์๋ฐฉ์์ Subject์์ ์ํ๋ณํ๋ฅผ ์๋ฆฌ๊ณ , update ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด์ ๊ฐ์ ๋๊ธฐ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. ์ฆ Subject์์ ๋๊ฒจ์ฃผ๋ ๊ฐ์ ์ํด Observer๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- Pull(Observer โ Subject)
ํ๋ฐฉ์์ Subject์์ ์ํ์ ๋ณํ๋ฅผ ์๋ฆฌ๋ฉด, ์ต์ ๋ฒ๋ updateํจ์์์ Subject์ getter ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ, ์ํ๋ ๊ฐ์ ์ป์ด๋ธ๋ค.