๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’๊ณต๋ถ€/JS

[JavaScript] ์ด๋ฒคํŠธ ์œ„์ž„(Event delegation)

by rindev 2021. 9. 23.

๐Ÿ“ƒ ์ด์–ด์ง€๋Š” ๊ธ€

 

 

๐Ÿค” ์ด๋ฒคํŠธ ์œ„์ž„์ด๋ž€?

ํ•˜์œ„ ์š”์†Œ์— ๊ฐ๊ฐ ์ด๋ฒคํŠธ๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ณ , ์ƒ์œ„์š”์†Œ์—์„œ ํ•˜์œ„ ์š”์†Œ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ปจํŠธ๋กค ํ•˜๋Š” ๋ฐฉ์‹

  1. ์ปจํ…Œ์ด๋„ˆ์— (์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” ul) ํ•˜๋‚˜์˜ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ• ๋‹นํ•จ
  2. ํ•ธ๋“ค๋Ÿฌ์˜ e.target ์„ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ๊ฐ€ ์–ด๋””์ธ์ง€ ์•Œ์•„๋ƒ„
  3. ์›ํ•˜๋Š” ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด ํ™•์ธ๋˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ ํ•ธ๋“ค๋งํ•จ (์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” tagName์œผ๋กœ ํ™•์ธํ•จ)
<body>
    <ul>
        <li>li 1</li>
        <li>li 2</li>
        <li>li 3</li>
    </ul>
</body>
const ul = document.querySelector("ul");
ul.addEventListener("click", function (e) {
	const targetli = e.target;
	if (targetli.tagName != "LI") return; // li์—์„œ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋๋ƒ„
	console.log("li clicked ul event..." + targetli.innerHTML);
});

ul์— click ์ด๋ฒคํŠธ๋ฅผ ์คฌ๋Š”๋ฐ li๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋™์ผํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•จ

→ li๊ฐ€ 1000๊ฐœ ์ •๋„ ์žˆ์„ ๋•Œ, ํ•˜๋‚˜ํ•˜๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ๋‹ค ๋‹ฌ์•„์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๋œป!

 

์ด๋ฒคํŠธ ์œ„์ž„์˜ ์žฅ์ 

  • ๋งŽ์€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ• ๋‹นํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋‹จ์ˆœํ•ด์ง€๊ณ , ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ ˆ์•ฝ๋จ
  • ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๋งˆ๋‹ค ํ•ธ๋“ค๋Ÿฌ๋„ ๊ฐ™์ด ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง
  • innerHTML์ด๋‚˜ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋กœ ์š”์†Œ ๋ฉ์–ด๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋บ„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— DOM ์ˆ˜์ •์ด ์‰ฌ์›Œ์ง

์ด๋ฒคํŠธ ์œ„์ž„์˜ ๋‹จ์ 

  • ์ด๋ฒคํŠธ๊ฐ€ ๊ผญ ๋ฒ„๋ธ”๋ง ๋˜์–ด์•ผ ์‹คํ–‰๋จ (๊ทผ๋ฐ ๋ช‡๋ช‡ ์ด๋ฒคํŠธ์—๋Š” ๋ฒ„๋ธ”๋ง์ด ์ง€์›๋˜์ง€ ์•Š๋Š”๊ฒŒ ์žˆ์–ด์„œ..)
  • CPU ์ž‘์—… ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค(๊ณ ๋Š” ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ํฐ ์˜ํ–ฅ์€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค)

 

๐Ÿ‘€ ์ฐธ๊ณ 

๋”๋ณด๊ธฐ

๋Œ“๊ธ€