01 · Concept

이벤트 전파 (Event Propagation)

DOM 이벤트는 단순히 타겟 요소에서만 발생하지 않습니다. 이벤트는 캡쳐링 → 타겟 → 버블링 3단계를 거쳐 전파됩니다.

사용자가 버튼을 클릭하면, 이벤트는 먼저 window에서 시작해 타겟까지 내려갑니다 (캡쳐링). 타겟에 도달한 후, 다시 window까지 올라갑니다 (버블링).

① 캡쳐링 (Capturing) — window → target
② 타겟 (Target) — 이벤트 발생 지점
③ 버블링 (Bubbling) — target → window
02 · Interactive Demo

직접 클릭해 보세요

중첩된 요소를 클릭하면 이벤트가 어떻게 전파되는지 실시간으로 확인할 수 있습니다.

window
document
div.parent
Event Log
요소를 클릭하면
이벤트 전파 로그가 표시됩니다
03 · Code Example

코드 예시

실제 코드로 동작 원리를 확인하세요.

// 버블링 (기본) — 타겟 → window 순서
document.querySelector('.parent')
  .addEventListener('click', (e) => {
    console.log('버블링:', e.currentTarget);
  });

// 캡쳐링 — window → 타겟 순서
document.querySelector('.parent')
  .addEventListener('click', (e) => {
    console.log('캡쳐링:', e.currentTarget);
  }, { capture: true });  // 또는 세 번째 인자에 true
04 · Interview Point

면접 핵심 질문

이벤트 전파는 3단계로 진행됩니다. 캡쳐링은 최상위(window)에서 타겟까지 내려가는 단계이고, 버블링은 타겟에서 다시 최상위로 올라가는 단계입니다. 기본적으로 이벤트 리스너는 버블링 단계에서 동작하며, addEventListener의 세 번째 인자에 true 또는 { capture: true }를 전달하면 캡쳐링 단계에서 이벤트를 처리할 수 있습니다.
stopPropagation()은 이벤트의 전파를 중단합니다. 현재 요소에서 이벤트 처리 후 부모/자식 요소로 더 이상 전파되지 않습니다.

preventDefault()는 이벤트의 기본 동작을 취소합니다. 예를 들어 링크 클릭 시 페이지 이동, 폼 제출 시 새로고침 등을 막습니다. 이벤트 전파는 그대로 진행됩니다.
이벤트 위임은 버블링을 활용한 패턴입니다. 자식 요소마다 이벤트 리스너를 붙이는 대신, 공통 부모 요소 하나에 리스너를 등록하여 event.target으로 실제 클릭된 요소를 판별합니다.

장점: 1. 메모리 효율 (리스너 수 감소) 2. 동적으로 추가되는 요소도 자동 처리 3. 관리 포인트가 하나로 집중