[Observer API ํํค์น๊ธฐ] 1. Observer API
โฐ 2024-06-12 (์) 01:26:00
๊ฐ์
ํ๋ก ํธ์๋๋ฅผ ๊ฐ๋ฐํ๋ค๋ณด๋ฉด, ์ ๋ง์ ์ด๋ฒคํธ๋ค์ ๋ค๋ฃจ๊ฒ ๋๋ค.
๋๋ถ๋ถ ์ฌ์ฉ์์ ์ํธ์์ฉ์ ๋ฐ๋ฅธ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ์ง๋ง, ๊ฐํน ์คํฌ๋กค์ด๋, ๋ฆฌ์ฌ์ด์ง๊ฐ์ด DOM์ ๋ณํ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ๊ธฐ๋ ํ๋ค.
์ด ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ Event Driven(์ดํ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ) ๋ฐฉ์๋ณด๋ค, ๋ธ๋ผ์ฐ์ ์ Observer API๋ฅผ ์ฐ๋ฉด ํจ์ฌ ์ต์ ํ๋ ์ฑ๋ฅ์ ์ด๋ฒคํธ ํธ๋ค๋ง์ ๊ตฌํํ ์ ์๋ค.
๋ณธ ์๋ฆฌ์ฆ๋ฅผ ํตํด Observer API๋ฅผ ํ๊ตฌํด๋ณด๊ณ ์ ํ๋ค.
Observer API
Observer API๋ ํน์ ์ด๋ฒคํธ๋, DOM์ ์ํ ๋ณํ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์งํ๊ณ , ์ด์ ๋ฐ๋ผ ์ํ๋ ๋์์ ์ํํ ์ ์๋ API๋ค.
๋ธ๋ผ์ฐ์ ์ API์ด๋ฏ๋ก, ๋ฐ๋์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์๋ง ์ฌ์ฉํ ์ ์๋ค.
Observer API์ ์ข ๋ฅ๋ 5๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
API | ์ฉ๋ |
---|---|
IntersectionObserver | ์์๊ฐ ๋ธ๋ผ์ฐ์ ๋ทฐํฌํธ ๊ฐ์ ๊ต์ฐจ ์ฌ๋ถ๋ฅผ ๊ฐ์งํจ |
ResizeObserver | ์์์ width, height ๋ณํ๋ฅผ ๊ฐ์ง |
MutationObserver | DOM ํธ๋ฆฌ์ ๋ณํ๋ฅผ ๊ฐ์ง |
PerformanceObserver | ํ์ด์ง ์ฑ๋ฅ๊ณผ ๊ด๋ จ๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ง |
ReportingObserver | ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ํ๋ ๊ฒฝ๊ณ ๋ฐ ๋ฌธ์ ๊ฐ์ง |
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์ ์ํธ์์ฉ๋ณด๋จ, ํ์ด์ง ์์์์ ์ํธ์์ฉ๊ณผ ์ฐ๊ด๋์ด์๋ค.
๊ฐ์๊ฐ ๊ฐ์ง ์ฉ๋์ ๋ง๊ฒ ์ ํฉํ ์ต์ ๋ฒ๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ, ๋์ ์ต์ ํ์ ์ ๋ขฐ์ฑ์๋ ์ด๋ฒคํธ ํธ๋ค๋ง์ด ๊ฐ๋ฅํ๋ค.
PerformanceObserver
์ ReportingObserver
๋ ์ฉ๋๋ก ์ธํด ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๊ฑฐ์ ์ธ ์ผ์ด ์๋ค.
Event Driven๊ณผ์ ์ฐจ์ด
์ด๋ฒคํธ ๋๋ฆฌ๋ธ๋ณด๋ค ํจ์ฌ ํจ๊ณผ์ ์ธ ์ด๋ฒคํธ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ํ๋๋ฐ, ๊ณผ์ฐ ์ด์งธ์ ๊ฐ๋ฅํ ๊ฒ์ผ๊น?
IntersectionObserver
๋ฅผ ์์๋ก ๋ค์ด๋ณด์. ์ด ์ต์ ๋ฒ๋ ์์๊ฐ ์ค์ ๋ทฐํฌํธ์ ๋ณด์ด๋์ง ์ฌ๋ถ๋ฅผ ๊ฐ์งํ ๋ ๋ง์ด ์ฐ์ธ๋ค.
์ฐ์ , ์ต์ ๋ฒ ์์ด ์์๊ฐ ๋ทฐํฌํธ์ ํํ๋๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ค๋ฉด ์๋ ํํ์ ์ฝ๋๊ฐ ํ์ํ๋ค.
TYPESCRIPT
1 2 3
document.addEventListener('scroll', () => { console.log('์คํฌ๋กค ์์น ํ์ธ ๋ฐ ๋์'); });
์์๊ฐ ๋ทฐํฌํธ์ ํฌํจ๋๊ธฐ ์ํด์ ๋ฐ๋์ ์คํฌ๋กค ์์
์ด ์ ํ๋๋ฏ๋ก, document
๋ผ๋ ์ ์ญ ๊ฐ์ฒด์ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ์ฌ ๊ฐ์งํ ์ ์์ ๊ฒ์ด๋ค.
์ด ๋ฐฉ๋ฒ์ ๊ฒฝ์ฐ, ์๋์ ๊ฐ์ ๋จ์ ์ด ์๋ค.
- ์ค์ฝํ์ ๋นํด ์ ์ฉ ๋ฒ์๊ฐ ๋๋ฌด ๋๋ค.
document
์ ์ ์ฉ๋์์ผ๋ฏ๋ก, ํด๋น DOM์ ๊ด์ฌ์ฌ์ ๊ด๊ณ์์ด ์คํฌ๋กค ์ ํญ์ ์ ์ฌ์ ์ธ ๋์์ด ์ถ๊ฐ๋๋ค. - ๋ฐ๋์ ์คํฌ๋กค์ด๋ผ๋ ์ ํ ์์ ์ ์๊ตฌํ๋ค. ์ด๋ ํ ์ด์ ๋ก๋ ์คํฌ๋กค ๋์ ์์ด ๋ทฐํฌํธ์ DOM์ด ํํ๋์ด๋, ์คํฌ๋กคํ๊ธฐ ์ ๊น์ง ๊ด๋ จ ์ด๋ฒคํธ ์ฝ๋๊ฐ ๋์ํ์ง ์์ ๊ฒ์ด๋ค.
- ๋ถํ์ํ ์ฝ๋๊ฐ ์ง์์ ์ผ๋ก ์คํ๋๋ค. ๋จ์ํ ๋ฌธ์๋ฅผ ์คํฌ๋กคํ ๋๋ง๋ค ์ด๋ฒคํธ๊ฐ ๊ณผ๋ํ๊ฒ ์คํ๋๋ฏ๋ก, ๋ถํ์ํ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๋ค.
IntersectionObserver
์ ์ ์ฉํ๋ฉด ์๋์ ๊ฐ์ด ํํ๋๋ค.
TYPESCRIPT
1 2 3 4 5 6 7 8 9
const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { console.log('Element is in view!'); } }); }); observer.observe(document.getElementById('tag'));
์ ์ฝ๋๋ ์ด๋ฒคํธ ๋๋ฆฌ๋ธ๊ณผ ๋ฌ๋ฆฌ, DOM์ด ๋ทฐํฌํธ์ ๊ต์ฐจํ๋ ์๊ฐ์๋ง ์ด๋ฒคํธ๊ฐ ๋์ํ๋ค. ๋ถํ์ํ ์ด๋ฒคํธ ๋ญ๋น๊ฐ ์ฌ๋ผ์ง๋ ์ ์ด๋ค. ๊ด๋ จ ์ฐ์ฐ์ด ์ค์ด๋ฌ์ ๋ฐ๋ผ ๋ ๋์ ํผํฌ๋จผ์ค๋ฅผ ๊ธฐ๋ํ ์ ์๋ค.
๋ง์น๋ฉฐ
๋ค์ ์ฅ๋ถํฐ IntersectionObserver
๋ฅผ ์์์ผ๋ก ๊ฐ ์ต์ ๋ฒ์ ๋ํด ์์ธํ ํํค์ณ๋ณด์.
๐ท๏ธ ํ๊ทธ
์ฝ์ด์ฃผ์ ์ ๊ณ ๋ง์์!
๋์์ด ๋์ จ๋ค๋ฉด, ๊ณต๊ฐ์ด๋ ๋๊ธ์ ๋ฌ์์ฃผ์๋ ๊ฑด ์ด๋ค๊ฐ์?
๋ธ๋ก๊ทธ ์ด์์ ํฐ ํ์ด ๋ฉ๋๋ค.