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)
๋ฉ์๋์์ ์ธ์๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ ๊ฐ์ฒด๊ฐ ๋์ด์จ๋ค.
์๋ฐ ๋ด์ฅ ์ต์ ๋ฒ ํจํด์ ๋จ์ ๊ณผ ํ๊ณ
Observable์ ํด๋์ค๋ค. ๋ฐ๋ผ์ ์ฌ์ฌ์ฉ์ฑ์ ์ ์ฝ์ด ์๊ธด๋ค.
๋ฐ๋ผ์ ์๋ธ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๋ ์ ์ด ๋ฌธ์ ๋ค. ์ด๋ฏธ ๋ค๋ฅธ ์ํผ ํด๋์ค๋ฅผ ํ์ฅํ๊ณ ์๋ ํด๋์ค์ Observable์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ์ฌ์ฌ์ฉ์ฑ์ ์ ์ฝ์ด ์๊ธด๋ค.
Observable ํด๋์ค์ ํต์ฌ ๋ฉ์๋๋ฅผ ์ธ๋ถ์์ ํธ์ถํ ์ ์๋ค.
Observervable API๋ฅผ ์ดํด๋ณด๋ฉด,
setChanged()
๋ฉ์๋๊ฐ protected๋ก ์ ์ธ๋์ด ์๋ฐ.Observable์ ์๋ฒํด๋์ค์์๋ง
setChanged()
๋ฅผ ํธ์ถํ ์ ์๋ค. ๊ฒฐ๊ตญ ์ง์ ์ด๋ค ํด๋์ค๋ฅผ ๋ง๋๋ก, Observable์ ์๋ธํด๋์ค๋ฅผ ์ธ์คํด์ค ๋ณ์๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์ธ ์ ์๋ค. ์ด๋ฐ ๋์์ธ์ ์์๋ณด๋ค๋ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ค๋ ๋์์ธ ์์น์๋ ์๋ฐฐ๋๋ค.
Last updated