[Pattern] - Observer pattern

November 3, 2022

๋””์ž์ธํŒจํ„ด

23๊ฐœ์˜ ๋””์ž์ธ ํŒจํ„ด์ด ์กด์žฌํ•˜๊ณ , ํฌ๊ฒŒ ์„ธ๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆŒ์ˆ˜ ์žˆ์Œ (์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰๋™ ํŒจํ„ด)

Web Observer API

observer ํŒจํ„ด์€ ํ–‰๋™ ํŒจํ„ด์— ์†ํ•จ. Observer Pattern์€ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๊ด€์ฐฐํ•˜์—ฌ, ๊ฐ์ฒด ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•  ๋•Œ ์‚ฌ์šฉํ•จ. ์•„๋ž˜๋Š” MDN์— ์กด์žฌํ•˜๋Š” Web Observer API

Untitled

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 ํ•˜๊ธฐ์‰ฝ์ง€๋งŒ ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๋ฅผ ๋ฌผ๊ณ ์žˆ์œผ๋ฉด ์œ„ํ—˜ํ•จ.


์ฐธ๊ณ 

Observer ํŒจํ„ด ์•Œ์•„๋ณด๊ธฐ (hooks์™€ observables)

KakaoTalk_Photo_2022-08-18-10-10-34.jpeg

results matching ""

    No results matching ""