[Pattern] - Observer pattern
๋์์ธํจํด
23๊ฐ์ ๋์์ธ ํจํด์ด ์กด์ฌํ๊ณ , ํฌ๊ฒ ์ธ๊ฐ์ง ์์ญ์ผ๋ก ๋๋์ ์์ (์์ฑ, ๊ตฌ์กฐ, ํ๋ ํจํด)
Web Observer API
observer ํจํด์ ํ๋ ํจํด์ ์ํจ. Observer Pattern์ ๊ฐ์ฒด์ ์ํ๋ฅผ ๊ด์ฐฐํ์ฌ, ๊ฐ์ฒด ๊ฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ ๋ ์ฌ์ฉํจ. ์๋๋ MDN์ ์กด์ฌํ๋ Web Observer API
Observer๋ start
์ disconnect
๋ฅผ ํตํด ํ๊ฒ ๊ฐ์ฒด๋ฅผ ๊ด์ฐฐํ ์ง ๋ง์ง๋ฅผ ์ ํ ์ ์์.
- ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์์ฑ์์ ํ๋ผ๋ฏธํฐ ๊ฐ์ผ๋ก ์ฝ๋ฐฑํจ์๋ฅผ ๋๊ฒจ์ค์ ์์. ์ด ์ฝ๋ฐฑํจ์๋ ๊ด์ฐฐ๋์์ด ๋ณ๊ฒฝ๋์์๋ notify ํ ๋ ์ฌ์ฉ
- observe ํจ์๋ฅผ ํตํด ๊ด์ฐฐ ๋์์ ํฐ์ผ์ ๋ฐ์
ResizeObserver of Observer API
ResizeObserver reference code of Web Observer API
๋ฌธ์ ์
์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์๊ฐ๋ฅ
- ํ๋์ ์ดํํธ์ ๋ค๋ฅธ ์ดํํธ๋ฅผ ๋ฌผ๊ณ ์๋ค๋ฉด ๋ฐ์ ๊ฐ๋ฅ.
๋ฐ๋ผ์ ํ์์๋ ์ด๋ฒคํธ๋ ๊ด์ฐฐํ๋ฉด ์๋๊ณ , ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์คํ ์์๊ฐ ๋ณด์ฅ๋์ด์ผํ๋๋ฐ ์ด๊ฒ์ ์ํด ReactiveX๊ฐ ๋์จ๊ฒ ๊ฐ์
ReactiveX๋ ๋ฐ์ดํฐ๊ฐ ๋๊ธฐ์์ธ์ง ๋น๋๊ธฐ์์ธ์ง์ ๊ด๊ณ์์ด ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ฐ์ดํฐ ์ํ์ค์์ ์๋ํ ์ ์๋๋ก ํ๋ Microsoft์์ ์๋ ๋ง๋ ์ํํธ์จ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ํ์ค์ ๊ฐ ํญ๋ชฉ์ ๋ํด ์๋ํ๋ ์ผ๋ จ์ ์ํ์ค ์ฐ์ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
hook ๊ณผ observer ์ฐจ์ด์
hook์ ์ปดํฌ๋ํธ์ ๋ฌถ์ฌ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค๋ฉด, observer๋ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ ๊ฐ์ฒด์
observer๋ ์ด๋ฒคํธ ์คํ๋๊ธฐ์ ๊น์ง state ๊ฐ์ ๋ณ๊ฒฝํ์ง์์, ํ์ง๋ง useEffect๋ React์ ๋ ๋๊ฐ ๋ ๋๊น์ง ์ด๋ฒคํธ์ ์คํ์ ๋ฏธ๋ฃจ๊ณ , state๋ฅผ ๊ด๋ จ๋์ด ์๋ ์ปดํฌ๋ํธ์ ๋ฐ์ธ๋ฉ ๋, useEffect๋ ๊ฐ์ ๋ฐฉ์ถํ์ง์์ง๋ง, oberser๋ ๋ณ๊ฒฝ๋ ๊ฐ์ pushํ์ฌ ํธ์ถํ ๊ตฌ๋ ์์๊ฒ ์๋ ค์ค(์ฌ๊ธฐ์ ์ฌ์ด๋ ๋ฐ์์ฐ๋ ค)
์ ๋ฆฌ
Observer ํจํด์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ฒด์ notify ํ๊ธฐ์ฝ์ง๋ง ์ฌ๋ฌ ์ด๋ฒคํธ๋ฅผ ๋ฌผ๊ณ ์์ผ๋ฉด ์ํํจ.
์ฐธ๊ณ