JavaScript에서 이벤트 전파란 무엇이며 왜 이해해야 할까
웹 페이지에서 사용자의 행동은 대부분 이벤트라는 형태로 처리된다. 버튼 클릭, 마우스 이동, 키보드 입력과 같은 동작은 모두 브라우저가 감지하여 자바스크립트로 전달한다. 그런데 하나의 요소에서 발생한 이벤트가 해당 요소에서만 처리되는 것은 아니다. 실제로는 부모 요소와 자식 요소 사이를 이동하며 순차적으로 처리된다. 이 과정을 이벤트 전파라고 부른다. 이벤트 전파 개념을 이해하지 못하면 의도하지 않은 동작이 발생하거나, 코드가 복잡해질 수 있다. 이 글에서는 자바스크립트 이벤트 전파의 기본 개념부터 동작 방식, 그리고 실제 개발에서 왜 중요한지를 차분하게 정리한다.
1. 이벤트 전파의 기본 개념
이벤트 전파란 하나의 이벤트가 발생했을 때,
해당 이벤트가 여러 HTML 요소를 거쳐 전달되는 과정을 의미한다.
예를 들어 버튼이 div 안에 들어 있는 구조라면,
버튼을 클릭했을 때 이벤트는 버튼에서 끝나지 않는다.
부모 요소와 상위 요소에도 영향을 미칠 수 있다.
이러한 동작 방식은 브라우저의 기본 설계에 포함된 개념이다.
2. HTML 구조와 이벤트의 관계
다음과 같은 구조를 생각해볼 수 있다.
이 구조에서 버튼을 클릭하면
-
버튼 요소
-
div 요소
-
document 객체
순서로 이벤트가 전달된다.
이 흐름을 이해하는 것이 이벤트 전파의 출발점이다.
3. 이벤트 전파의 세 가지 단계
자바스크립트에서 이벤트는 다음 세 단계를 거쳐 처리된다.
-
캡처링 단계
-
타깃 단계
-
버블링 단계
이 세 단계는 항상 같은 순서로 진행된다.
4. 캡처링 단계란 무엇인가
캡처링 단계는 이벤트가 가장 바깥 요소에서 시작해,
이벤트가 발생한 실제 요소로 내려오는 과정이다.
이 단계에서는
-
document
-
html
-
body
-
상위 요소
순으로 이벤트가 전달된다.
기본적으로 캡처링 단계에서는
이벤트가 처리되지 않는 경우가 많다.
5. 타깃 단계의 의미
타깃 단계는
이벤트가 실제로 발생한 요소에 도달한 상태를 의미한다.
버튼을 클릭했다면,
이 단계에서 버튼 요소가 이벤트의 중심이 된다.
이 시점에서 등록된 이벤트 핸들러가 실행된다.
6. 버블링 단계의 동작 방식
버블링 단계는
이벤트가 타깃 요소에서 다시 위로 올라가는 과정이다.
즉,
-
버튼
-
부모 div
-
body
-
document
순으로 이벤트가 전파된다.
자바스크립트에서 대부분의 이벤트 처리는
이 버블링 단계를 기준으로 동작한다.
7. 이벤트 버블링 예제 코드
다음은 간단한 버블링 예제이다.
이 상태에서 버튼을 클릭하면
콘솔에는 다음 순서로 출력된다.
-
button 클릭
-
container 클릭
이는 이벤트가 버블링 단계에서
부모 요소로 전달되기 때문이다.
8. 이벤트 전파를 이해해야 하는 이유
이벤트 전파를 이해하지 못하면
다음과 같은 문제가 발생할 수 있다.
-
원하지 않는 이벤트 중복 실행
-
부모 요소의 이벤트가 예기치 않게 동작
-
코드 흐름을 파악하기 어려움
특히 리스트, 카드 UI, 메뉴 구조처럼
중첩된 요소가 많은 화면에서는
이벤트 전파 이해가 필수적이다.
9. 이벤트 전파를 제어하는 방법
자바스크립트에서는
이벤트 전파를 제어할 수 있는 방법을 제공한다.
stopPropagation()을 사용하면
이벤트가 더 이상 부모 요소로 전달되지 않는다.
이 방법은
특정 요소에서만 이벤트를 처리해야 할 때 유용하다.
10. 이벤트 위임과의 관계
이벤트 전파 개념은
이벤트 위임이라는 패턴의 기반이 된다.
이벤트 위임이란
부모 요소 하나에만 이벤트를 등록하고,
자식 요소의 이벤트를 함께 처리하는 방식이다.
이 방식은
-
코드량 감소
-
동적 요소 처리 용이
-
성능 관리에 유리
라는 장점을 가진다.
11. 이벤트 전파 이해 시 주의할 점
이벤트 전파를 다룰 때는
다음 사항을 항상 고려해야 한다.
-
모든 이벤트가 버블링되는 것은 아님
-
전파 차단은 최소한으로 사용
-
구조를 먼저 설계한 뒤 이벤트를 등록
이 원칙을 지키면
코드가 복잡해지는 것을 방지할 수 있다.
마무리 정리
자바스크립트의 이벤트 전파는 단순한 동작 규칙이 아니라, 웹 페이지 전체의 상호작용 구조를 이해하는 핵심 개념이다. 이벤트가 어디서 시작되고, 어떤 경로를 따라 이동하는지를 이해하면 불필요한 오류를 줄일 수 있으며, 보다 효율적인 이벤트 처리가 가능해진다. 특히 복잡한 UI를 다루는 환경에서는 이벤트 전파에 대한 이해가 코드의 품질과 직결된다. 자바스크립트로 동적인 웹을 구현하고자 한다면, 이벤트 전파 개념을 정확히 짚고 넘어가는 것이 중요하다.
댓글
댓글 쓰기