# ๐ŸŽ‰ EVENT

# ๐Ÿง‘๐Ÿผโ€๐Ÿš€ Event๋ฅผ ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ 

โ—input์ฐฝ์— ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ณ , ์—”ํ„ฐ๋ฅผ ์ณค์„ ๋•Œ ์ง€ํ•˜์ฒ ์—ญ์„ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? โ—์‚ญ์ œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ง€ํ•˜์ฒ  ์—ญ์„ ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? โ—์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด?

์œ„์™€ ๊ฐ™์€ ์ด๋ฒคํŠธ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ์ด๋ฒคํŠธ๋ฅผ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ๋™์ ์ธ ์›น์€ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ์ž˜ ๋˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ƒํ˜ธ์ž‘์šฉ์€ ์–ด๋–ค ์ด๋ฒคํŠธ์— ์˜ํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋งŽ์€ ์ธํ„ฐ๋ ‰์…˜์€ ๋ชจ๋‘ Event๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๊นŠ์€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ Event๋ผ๋Š” ์‚ฌ๊ฑด์„ ๋งŒ๋‚˜๋Ÿฌ ๊ฐ€๋ณผ๊นŒ์š”?

# ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ ์ด ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ๋‚˜๋ฉด

  • ์ด๋ฒคํŠธ ์ข…๋ฅ˜๋ฅผ ์ตœ์†Œ 3๊ฐ€์ง€ ์ด์ƒ ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  • DOM Element์— ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฒคํŠธ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฒคํŠธ ์œ„์ž„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

# ๐ŸŽ‰ ์ด๋ฒคํŠธ

์›น์„ ํƒ์ƒ‰ํ•˜๋Š” ๋™์•ˆ ๋ธŒ๋ผ์šฐ์ €๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ(event)๋Š” ์–ด๋–ค ์‚ฌ๊ฑด์„ ์˜๋ฏธํ•˜๋Š”๋ฐ์š”. ๋ธŒ๋ผ์šฐ์ €์—์„œ์˜ ์‚ฌ๊ฑด์ด๋ž€ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญ ํ–ˆ์„ '๋•Œ', ์Šคํฌ๋กค์„ ํ–ˆ์„ '๋•Œ', ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ–ˆ์„ '๋•Œ'์™€ ๊ฐ™์€ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€ํ•˜์ฒ  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ณ  ์—”ํ„ฐ๋ฅผ ์ž…๋ ฅํ–ˆ์„ '๋•Œ', ์‚ญ์ œ ๋ฒ„ํŠผ์„ ์ž…๋ ฅํ–ˆ์„ '๋•Œ'์™€ ๊ฐ™์€ ์ด๋ฒคํŠธ๋“ค์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

# 1. ์ด๋ฒคํŠธ์˜ ์ข…๋ฅ˜

์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ €, ์ด๋ฒคํŠธ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ์ด๋ฒคํŠธ๋“ค์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

<h2 class="font-size-20 mb-0 pb-0">1)์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฒคํŠธ</h2>

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)์ด๋ฒคํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋กœ๋“œํ•œ HTMLํŽ˜์ด์ง€๊ฐ€ ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜์—ˆ๋‹ค๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋“ค์ž…๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์„ค๋ช…
load ์›น ํŽ˜์ด์ง€์˜ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ
unload ์›น ํŽ˜์ด์ง€๊ฐ€ unload ๋  ๋•Œ (์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•œ ๊ฒฝ์šฐ)
error ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚ฌ๊ฑฐ๋‚˜ ์š”์ฒญํ•œ ์ž์›์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
resize ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ–ˆ์„ ๋•Œ
scroll ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์œ„์•„๋ž˜๋กœ ์Šคํฌ๋กค ํ•  ๋•Œ
<h2 class="font-size-20 mb-0 pb-0">2)ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ</h2>

ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ณด๋“œ๋ฅผ ์ด์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. keydown์ด๋‚˜ keypress์ด๋ฒคํŠธ์— ๋Œ€ํ•œ event ๊ฐ์ฒด๋Š” ์–ด๋–ค ํ‚ค๊ฐ€ ๋ˆŒ๋ ธ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์„ค๋ช…
keydown ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ์ฒ˜์Œ ๋ˆŒ๋ €์„ ๋•Œ(ํ‚ค๊ฐ€ ๋ˆŒ๋ฆฐ ๋™์•ˆ์€ ๊ณ„์†ํ•ด์„œ ๋ฐœ์ƒ)
keyup ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๋—„ ๋•Œ
keypress ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๋ˆŒ๋ €๋‹ค๊ฐ€ ๋–ผ์–ด์„œ ๋ฌธ์ž๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋˜๋ฉด ๋ฐœ์ƒํ•œ๋‹ค.
ํ™”์‚ดํ‘œ ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ๋•Œ keydown ์ด๋ฒคํŠธ๋Š” ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ด ์ด๋ฒคํŠธ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๊ณ„์† ๋ˆ„๋ฅด๊ณ  ์žˆ์œผ๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.
<h2 class="font-size-20 mb-0 pb-0">3)๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ</h2>

๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋Š” ๋งˆ์šฐ์Šค๋ฅผ ์›€์ง์ด๊ฑฐ๋‚˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์„ค๋ช…
click ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ
dblclick ๋งˆ์šฐ์Šค๋ฅผ ๋”๋ธ” ํด๋ฆญํ–ˆ์„ ๋•Œ
mousedown ๋งˆ์šฐ์Šค๋ฅผ ๋ˆ„๋ฅด๊ณ  ์žˆ์„ ๋•Œ
mouseup ์š”์†Œ ์œ„์—์„œ ๋ˆ„๋ฅด๊ณ  ์žˆ๋˜ ๋งˆ์šฐ์Šค๋ฅผ ๋—„ ๋•Œ
mousemove ๋งˆ์šฐ์Šค๋ฅผ ์›€์ง์ผ ๋•Œ(ํ„ฐ์น˜์Šคํฌ๋ฆฐ์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š์Œ)
mouseover ์š”์†Œ ์œ„๋กœ ๋งˆ์šฐ์Šค๋ฅผ ์›€์ง์˜€์„ ๋•Œ(ํ„ฐ์น˜์Šคํฌ๋ฆฐ์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š์Œ)
mouseout ์š”์†Œ ๋ฐ”๊นฅ์œผ๋กœ ๋งˆ์šฐ์Šค๋ฅผ ์›€์ง์˜€์„ ๋•Œ(ํ„ฐ์น˜์Šคํฌ๋ฆฐ์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š์Œ)
<h2 class="font-size-20 mb-0 pb-0">4) ๐Ÿ”focus์™€ blur ์ด๋ฒคํŠธ</h2>

์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋‚˜ ํผ ์š”์†Œ ๊ฐ™์€ HTML ์š”์†Œ๋Š” ํฌ์ปค์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์š”์†Œ๋“ค์€ ์ž์‹ ์ด ํฌ์ปค์Šค๋ฅผ ๊ฐ–๊ฑฐ๋‚˜ ์žƒ์„ ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด ์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ ํผ์˜ ์š”์†Œ๋“ค๊ณผ ์ƒํ˜ธ์ง์šฉ์„ ํ•  ๋•Œ ๋„์›€๋ง์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ(๋Œ€๋ถ€๋ถ„ ๋„์›€๋ง์€ ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ง์šฉ์„ ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์š”์†Œ๋ฅผ ํ†ตํ•ด ๋ณด์—ฌ์ค€๋‹ค.)
  • ์‚ฌ์šฉ์ž๊ฐ€ (ํผ์„ ์ œ์ถœํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹ ) ์–ด๋Š ํ•œ ์š”์†Œ์—์„œ ๋‹ค๋ฅธ ์š”์†Œ๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ ์œ ํšจ์„ฑ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
์ด๋ฒคํŠธ ์„ค๋ช…
focus/focusin ์š”์†Œ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ์–ป์—ˆ์„ ๋•Œ
blur/focusout ์š”์†Œ๊ฐ€ ํฌ์ปค์Šค๋ฅผ ์žƒ์—ˆ์„ ๋•Œ

# 2. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€์˜ HTML๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ํ•ธ๋“ค๋งํ•˜๋„๋ก ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. HTML ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ.
  2. ์ „ํ†ต์ ์ธ DOM ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

# 3. ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(Event Listener)

๊ทธ๋Ÿฌ๋‚˜ 1,2๋ฒˆ์˜ ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ , 3๋ฒˆ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๊ธ€์—์„œ๋Š” 3๋ฒˆ์งธ ๋ฐฉ๋ฒ•๋งŒ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท 2019-07-20 ์˜คํ›„ 5 42 25

# ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(Event Listener) ํ™œ์šฉ

function onAddStationHandler() {
  // ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ๋‹ค.
}
// ์ง€ํ•˜์ฒ  ์—ญ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
const $stationAddButton = document.querySelector("#station-add-btn"); 
// ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ onAddStationHandlerํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ๋ฐ”์ธ๋”ฉ ํ•œ๋‹ค.
$stationAddButton.addEventListener('click', onAddStationHandler); 
  1. click: ๋Œ€๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” ์ด๋ฒคํŠธ. ์œ„ ์˜ˆ์ œ์—์„œ๋Š” ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  2. onAddStationHandler :์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋  ์ฝ”๋“œ. ์˜ˆ์ œ์—์„œ๋Š” onAddStationHandler() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•˜๋Š” ์ด์œ ๋Š” ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด (์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊ฐ€ ์•„๋‹ˆ๋ผ) ์ด๋ฒคํŠธ๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋  ๋•Œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

# ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ๋ฆฌ์Šค๋„ˆ

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ์ง€์ •๋œ ํ•จ์ˆ˜์— ๊ด„ํ˜ธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ๋ฐ”์ธ๋”ฉ ๋˜๋Š” ์ˆœ๊ฐ„ ์ฆ‰์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ํ•จ์ˆ˜๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์‹คํ–‰๋˜์–ด, ์›์น˜ ์•Š๋Š” ๋™์ž‘์„ ์ผ์œผํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ต๋ช… ํ•จ์ˆ˜(anonymous function) (opens new window)๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$stationAddButton.addEventListener('blur', function() { 
  // ์ต๋ช…ํ•จ์ˆ˜๋Š” ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋ฉฐ, ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋ฅผ ๋‘˜๋Ÿฌ ์‹ผ๋‹ค.
  onAddStationHandler(name);
})

์ต๋ช… ํ•จ์ˆ˜๋Š” ๊ด„ํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•จ์ˆ˜๋Š” ์ต๋ช… ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งŒ ์‹คํ–‰๋˜๋ฉฐ, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


# 3. ์ด๋ฒคํŠธ์˜ ํ๋ฆ„๊ณผ ์ œ์–ด

๋Œ€๋ถ€๋ถ„์˜ HTML ์š”์†Œ๋Š” ๋‹ค๋ฅธ ์š”์†Œ์˜ ๋‚ด๋ถ€์— ์ค‘์ฒฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฒ„ํŠผ์— ๋งˆ์šฐ์Šค๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ฑฐ๋‚˜ ํด๋ฆญํ•˜๋ฉด, ๊ทธ ๋ถ€๋ชจ ์š”์†Œ ํ˜น์€ ์ž์‹์š”์†Œ ๋˜ํ•œ ๊ฐ™์ด ํด๋ฆญํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์ผ์œผํ‚ค๋Š”๋ฐ์š”. ๋งํฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชฉ๋ก์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” <a> ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด๊ณผ ๋™์‹œ์— <a> ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์š”์†Œ๋“ค์—๋„ ๋™์ผํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์ด๋ฒคํŠธ ํ๋ฆ„(event flow)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด๋ฒคํŠธ๊ฐ€ ํ๋ฅด๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ์˜ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง: ์ด๋ฒคํŠธ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๋™์ž‘์— ์ง์ ‘์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฐ›์€ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ์ „ํŒŒ๋˜์–ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹. ์ด๋ฒคํŠธ ์บก์ณ๋ง: ์ด๋ฒคํŠธ๊ฐ€ ๊ฐ€์žฅ ๋ฐ”๊นฅ์ชฝ์˜ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์•ˆ์ชฝ์œผ๋กœ ์ „ํŒŒ๋˜์–ด ๋“ค์–ด์˜ค๋Š” ๋ฐฉ์‹

์œ„์™€ ๊ฐ™์€ ์ด๋ฒคํŠธ์˜ ํ๋ฆ„์œผ๋กœ ์ธํ•ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋™์ž‘์ด์™ธ์—๋„ ์ด๋ฒคํŠธ๊ฐ€ ํผ์ ธ๋‚˜๊ฐ€์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ์ด๋ฒคํŠธ ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ฆฌ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


# Event ๊ฐ์ฒด

Event ๊ฐ์ฒด๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์š”์†Œ์™€ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Event ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์š”์†Œ
  • keypress ์ด๋ฒคํŠธ๊ฐ€ ์–ด๋–ค ํ‚ค์— ์˜ํ•ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€์—๋Œ€ํ•œ ์ •๋ณด
  • ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ์š”์†Œ๋ฅผ ํด๋ฆญํ•ด์„œ click ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด

์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋กœ ์ง€์ •๋œ ํ•จ์ˆ˜์— ์ž๋™์œผ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์†์„ฑ ๋ชฉ์ 
target ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์š”์†Œ(์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•œ ๊ฐ€์žฅ ๋ช…ํ™•ํ•œ ์š”์†Œ)
type ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์˜ ์ข…๋ฅ˜
๋ฉ”์„œ๋“œ ๋ชฉ์ 
preventDefault() ์ด๋ฒคํŠธ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ทจ์†Œํ•œ๋‹ค.
๋งํฌ๋ฅผ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ํผ์„ ์ œ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ด๋ฒคํŠธ๋“ค์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
์ด๋Ÿฐ ์š”์†Œ๋“ค์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ค‘๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”
(์˜ˆ๋ฅผ ๋“ค๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ํผ์„ ์ œ์ถœํ•ด๋„ ๊ณ„์† ๊ฐ™์€ ํŽ˜์ด์ง€์— ๋จธ๋ฌด๋ฅด๊ฒŒ ํ•˜๋ ค๋ฉด)
event ๊ฐ์ฒด์˜ preventDefault() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
stopPropagation() ์ด๋ฒคํŠธ์˜ ์บก์ฒ˜๋ง์ด๋‚˜ ๋ฒ„๋ธ”๋ง์„ ์ค‘๋‹จํ•œ๋‹ค.
์ด๋ฒคํŠธ๊ฐ€ ๋ถ€๋ชจ ์š”์†Œ๋กœ ๋ฒ„๋ธ”๋ง๋˜๋Š” ๊ฒƒ์„ (ํŠนํžˆ ๋ถ€๋ชจ ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ๊ฐœ๋ณ„์ ์ธ
์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๋”๋”์šฑ) ์ค‘๋‹จํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ๋‹ค.
์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ์ค‘๋‹จํ•˜๋ ค๋ฉด event ๊ฐ์ฒด์˜ stopPropagation() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•œ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์˜ ์ฝ˜์†”์ฐฝ์„ ํ‚ค๊ณ , event ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ์™€, text๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ์ฝ˜์†” ์ฐฝ์— ๊ธฐ๋ก๋˜๋Š” event ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”.

# 4. ์ด๋ฒคํŠธ ์œ„์ž„

์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ง€์ •ํ•˜๋Š” ์š”์†Œ๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์„์ˆ˜๋ก ํŽ˜์ด์ง€์˜ ์‹คํ–‰ ์†๋„๋Š” ๋Š๋ ค์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํšจ์œจ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฒคํŠธ์˜ ํ๋ฆ„์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ชจ ์š”์†Œ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์š”์†Œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์ด๋ฒคํŠธ์˜ ํ๋ฆ„์„ ์ด์šฉํ•ด ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์‹คํ–‰ํ•  ์ž‘์—…์„ ์š”์†Œ์˜ ๋ถ€๋ชจ ์š”์†Œ์—๊ฒŒ ์œ„์ž„(Delegation)ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


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

  • ๋™์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๋Š” ์š”์†Œ๋“ค์—๋„ ๋™์ž‘ํ•œ๋‹ค.

    • DOMํŠธ๋ฆฌ์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ๋ถ€๋ชจ ์š”์†Œ์—๊ฒŒ ์œ„์ž„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์š”์†Œ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋‹ค์‹œ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ์ฝ”๋“œ์˜ ๊ฐ„๊ฒฐ

    • ์ด ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ๋งŽ์ด ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ DOM๊ณผ ์ฝ”๋“œ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ๊ฐ„์†Œํ•ด์ ธ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜์— ๋„์›€์ด ๋œ๋‹ค.
<ul id="parent-list">
    <li id="item1">Item 1</li>
    <li id="item2">Item 2</li>
    <li id="item3">Item 3</li>
</ul>
//์ƒ์œ„ ๋…ธ๋“œ์— ์ด๋ฒคํŠธ ์„ค์ •
document.getElementById("parent-list").addEventListener("click", function (e) {            
   if (e.target && e.target.nodeName == "LI") {                
      console.log(`List item  ${e.target.id} was clicked!`);
    }
 });

# ๐Ÿ“˜ ์ •๋ฆฌ

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

# ๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ