์น ํ๋ก ํธ์๋ ๊ฐ๋ฐ์
๋ก ์ฑ์ฅํ๊ธฐ ์ํด ์ฐํ ์ฝ์์ ์ถ์ฒ๋ฐ์ ์ฑ ์ ์ฝ๊ณ
์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ณ ์ ๋ ๊ทธ๋ฆผ์ด ์๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ๋ด์ฉ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ค. ์ด๋ฐ ๋ณ๊ฒฝ
์ ๋ง๋๋ ๊ฒ์ด ์ด๋ฒคํธ
๋ค.
YAGNI ์์น์ด๋ You aren't gonna need it์ ์ฝ์๋ก ์ ๋ง ํ์ํ๋ค๊ณ ๊ฐ์ฃผํ ๋๊น์ง ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ง ๋ง๋ผ
๋ผ๋ ์์น์ด๋ค.
ํ๋ง๋๋ก ๋ฏธ๋๋ฅผ ์์ธกํ์ง๋ง๋ผ
๋ผ๋ ์ด์ผ๊ธฐ๋ค.
ํ๋ก์ ํธ๋ฅผ ์ ๊ทผํ ๋, ๋จผ์ ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ถฐ ๊ฐ๋ฐํ๊ณ ์๋ก์ด ์๊ตฌ๊ฐ ์๊ธธ๋ฉด ์ด์ ๋ฐ๋ผ ์ํคํ ์ฒ๋ฅผ ์ง์์ ์ผ๋ก ๋ฐ์ ์์ผ ๊ฐ์ผํ๋ค.
๋น์ ์ด ํ์ํ๋ค๊ณ ์์ธกํ ๋๊ฐ ์๋๋ผ ์ค์ ๋ก ํ์ํ ๋ ๊ตฌํํ๋ผ.
-์ ํ๋ฆฌ์ค(xp์ ์ฐฝ์์)
ํนํ ํ๋ ์์ํฌ ์๋ ํ๋ก์ ํธ์์๋ ์ด ์์น์ ์ ๋์ ์ผ๋ก ์ค์ํ๊ฒ ์ฌ๊ฒจ์ง๋ค.
์ํคํ
์ฒ๋ฅผ ๊ณผ๋ํ๊ฒ ์์ง๋์ด๋งํ ๊ฒฝ์ฐ ์๋ฌด๋ ์ ์ง ๊ด๋ฆฌํ์ง ์๋ ๋ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ํ์ฅ ์ค๊ณ์ ๊ณผ๋ํ ์ํ์ด ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฒคํธ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ํ๋ ๋์์ผ๋ก, ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์์๊ฒ ์ด๋ฅผ ์๋ ค์ค ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๋ฐ์ํ ์ ์๋ค.
๋ง์ฐ์ค ์ด๋ฒคํธ, ํค๋ณด๋ ์ด๋ฒคํธ, ๋ทฐ ์ด๋ฒคํธ๋ฅผ ํฌํจํ ์ฌ์ฉ์๊ฐ ํธ๋ฆฌ๊ฑฐํ ์ด๋ฒคํธ์ ๋ฐ์ํ ์ ์๊ณ , ์์คํ ์์ฒด์์๋ ์ด๋ฒคํธ๋ฅผ ์์ฑํ ์ ์๋ค.
๊ธฐ๋ณธ ํด๋ฆญ ์ด๋ฒคํธ ๋ผ์ดํ ์ฌ์ดํด์ด๋ค.
๋ฒํผ ๋ ๋๋ง ๐ ๋ฒํผ ํด๋ฆญ ๐ click ์ด๋ฒคํธ ์ ๋ฌ ๐ click ์ด๋ฒคํธ ์บก์ฒ ๐ click ์ด๋ฒคํธ์ ๋ฐ์
์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ DOM์์์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋น ๋ฅด์ง๋ง ์ง์ ๋ถํ ๋ฐฉ๋ฒ์ผ๋ก on์์ฑ
์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ชจ๋ ์ด๋ฒคํธ ํ์
๋ง๋ค DOM์์์ ํด๋น๋๋ ์์ฑ์ ๊ฐ์ง๋ค.
on์์ฑ์ ๋จ์
์ ์์ฑ์ ์ฌ์ฉํ๊ฒ๋๋ฉด ํ๋ฒ์ ํ๋์ ํธ๋ค๋ฌ๋ง ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฝ๋๊ฐ ํธ๋๋ฌ๋ฅผ ๋ฎ์ด ์ฐ๋ฉด ์๋ ํธ๋ค๋ฌ๋ ์์ํ ์์ค๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ธ addEventListener ๋ฉ์๋๊ฐ ์๋ค.
์ด ๋ฉ์๋๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ DOM๋
ธ๋์ EventTarget ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
์ธํฐํ์ด์ค์ add~๋ฉ์๋๋ ์ด๋ฒคํธ ํธ๋๋ฌ๋ฅผ DOM ๋
ธ๋์ ์ถ๊ฐํ๋ค.
DOM์ ์์๊ฐ ๋ ์ด์ ์กด์ฌํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ณ ์ ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌ๋ ๋ชจ๋ ์ด๋ฒคํธ์๋ Event ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค. ํ์ ์ ๋ฐ๋ผ ์ด๋ฒคํธ ๊ฐ์ฒด๋ Event ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ๋ ๊ตฌ์ฒด์ ์ธ Event ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋ค.
์์๋ก click์ด๋ฒคํธ๋ MouseEvent ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
์ด ์ธํฐํ์ด์ค์๋ ์ด๋ฒคํธ ์ค ํฌ์ธํฐ์ ์ขํ, ์ด๋.. ์ ๋ํ ์ ๋ณด๋ฑ์ด ์๋ค.
- MouseEvnet์ ์ธํฐํ์ด์ค ๊ณ์ธต ๊ตฌ์กฐ
์ฌ๊ธฐ ์ค์ฒฉ๋ HTML ๊ตฌ์กฐ๊ฐ ์๋ค.
<body>
<div>
<button/>
</div>
<body>
document
.querySelector('div')
.addEventListener('click', () => { // click์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ ๋ณ์๋ก ์ด๋ฒคํธ์ ํ์
console.log('Div Click') // {}์์ ์ฝ๋๋ ๋๋ฒ์งธ ๋งค๊ฐ ๋ณ์๋ก ์ด๋ฒคํธ ํธ๋ค๋ฌ
}, false) // false๋ ์ธ๋ฒ์งธ ๋งค๊ฐ ๋ณ์๋ก useCapture์ด๋ค.
document
.querySelector('button')
.addEventListener('click', () => {
console.log('Button Click')
}, false)
์ด ๊ตฌ์กฐ๋ ๋ฒํผ์ ํด๋ฆญํ์ ๋ button์ด div์์ ์์ผ๋ฏ๋ก button๋ถํฐ ์์ํด ๋ ํธ๋ค๋ฌ๊ฐ ๋ชจ๋ ํธ์ถ๋๋ค. ์ด๋ฒคํธ ๊ฐ์ฒด๋ ์ด๋ฅผ ํธ๋ฆฌ๊ฑฐํ DOM ๋ ธํธ์์ ์์ํด ๋ชจ๋ ์กฐ์ ๋ ธ๋๋ก ์ฌ๋ผ๊ฐ๋ค.
์ด ๋ฉ์ปค๋์ฆ์ ๋ฒ๋ธ๋จ๊ณ
or ์ด๋ฒคํธ ๋ฒ๋ธ๋ง
์ด๋ผ ๋ถ๋ฆฐ๋ค.
์ด ๋จ๊ณ๋ ํธ๋ค๋ฌ๊ฐ ์ํฅ์
์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ Event ์ธํฐํ์ด์ค์ stopPropagation๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ฒ๋ธ ์ฒด์ธ์ ์ค์งํ ์ ์๋ค.
addEventListener๋ฉ์๋์ ์ธ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ useCapture
๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ด false์ธ ๊ฐ์ด ์๋ค. ์ด ๋งค๊ฐ๋ณ์๋ ์ ํ ์ฌํญ์ด์ง๋ง ํญ๋์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๊ฐ๊ธฐ ์ํด์๋ ํฌํจ์์ผ์ผํ๋ค.
์ด ๋งค๊ฐ๋ณ์์ true๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฒ๋ธ๋จ๊ณ ๋์ ์บก์ฒ ๋จ๊ณ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ถ๊ฐํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์บก์ฒ ๋จ๊ณ๋ ํธ๋ค๋ฌ๊ฐ ๋ฒ๋ธ๋จ๊ณ์ ๋ฐ๋์ธ ํํฅ์
์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
์์คํ
์ ์บก์ฒ๋จ๊ณ
์๐ ๋ชฉํ๋จ๊ณ
๋ฅผ ๊ฑฐ์ณ๐ ๋ฒ๋ธ๋จ๊ณ
๋ก ์คํ๋๋ค.
์๋ก์ด ์ํ๋ง๋ค ์๋ก์ด DOMํธ๋ฆฌ๋ฅผ ์์ฑํด ๊ฐ์ DOM์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉ์ํฌ ์ ์๋ค.๋ชจ๋ ์ด๋ฒคํธ ๋ค์์ ์ํ๋ฅผ ์กฐ์ํ ํ ์๋ก์ด ์ํ๋ก ๋ฉ์ธ ๋ ๋๋ง ํจ์๋ฅผ ํธ์ถํ๋ค.
์ฌ์ฉ์๊ฐ ํญ๋ชฉ์ ์ถ๊ฐํ๊ณ ์ญ์ ํ๋ ๊ฒ์ ๊ฐ์ ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋จํ ์ ์ค์ผ์ด์ค์ ๋จ๊ณ๋ฅผ ์ด๊ฑฐํจ์ผ๋ก์จ ์ํ-๋ ๋๋ง-์ด๋ฒคํธ ๋ฃจํ์๋ํด ์์๋ณด์๋ค.