Programing/javascript

자바스크립트 이벤트 위임(Event Delegation)과 성능 최적화

2025. 4. 24. 08:23
반응형

웹 페이지에서 많은 DOM 요소에 이벤트 리스너를 개별로 붙이면 성능 저하와 관리 복잡도가 발생할 수 있습니다. 이런 문제를 해결하는 효과적인 기법이 바로 이벤트 위임(Event Delegation)입니다. 이 글에서는 이벤트 위임의 개념, 장점, 실전 예제, 그리고 성능 최적화 포인트까지 정리합니다.


✨ 이벤트 위임이란?

자식 요소마다 개별적으로 이벤트를 붙이는 대신, 상위 요소에 이벤트 리스너를 등록하고 이벤트 버블링을 통해 처리하는 방식입니다.

자바스크립트 이벤트는 기본적으로 버블링(Bubbling) 되므로, 상위 요소에서도 하위 요소에서 발생한 이벤트를 감지할 수 있습니다.


📌 왜 이벤트 위임을 사용할까?

  • 성능 개선: DOM 요소가 많을수록 이벤트 핸들러를 줄일 수 있어 렌더링 효율 향상
  • 동적 요소 대응: 이후에 추가되는 요소에도 자동으로 이벤트 적용 가능
  • 유지 보수 용이성 증가

🧪 예제: 클릭 이벤트 위임

<ul id="menu">
  <li data-id="1">메뉴1</li>
  <li data-id="2">메뉴2</li>
  <li data-id="3">메뉴3</li>
</ul>
const menu = document.getElementById("menu");
menu.addEventListener("click", function(event) {
  const li = event.target.closest("li");
  if (li) {
    console.log(`클릭한 항목: ${li.dataset.id}`);
  }
});
  • ul에만 이벤트를 등록했지만, 어떤 li를 클릭했는지 판별할 수 있습니다.
  • 새로운 li를 JS로 추가해도 별도 리스너 등록 없이 동작합니다.

🚀 동적으로 추가되는 요소 처리 예시

const newItem = document.createElement("li");
newItem.textContent = "메뉴4";
newItem.dataset.id = "4";
document.getElementById("menu").appendChild(newItem);
  • 이벤트 위임을 통해 새롭게 추가된 요소도 별도 처리 없이 자동 적용됩니다.

🧠 주의할 점

  • event.target이 실제 클릭된 요소이므로, 원하는 요소를 정확히 판별하려면 closest() 또는 조건문 사용이 중요
  • 이벤트 캡처링과 버블링 순서에 유의

✅ 결론

이벤트 위임은 효율적인 이벤트 관리 방식으로, 특히 요소가 많거나 동적으로 추가되는 UI에서 성능과 유지보수 측면에서 매우 유용합니다. 현대 웹 애플리케이션에서 필수적으로 알아두어야 할 실용적인 패턴입니다.

반응형

'Programing > javascript' 카테고리의 다른 글

자바스크립트 Date 객체 소개, 예제, 그리고 심화 활용법  (1) 2025.04.24
moment.js 소개, 사용법, 그리고 심화 이해  (0) 2025.04.24
자바스크립트 날짜 다루기: Date vs dayjs vs date-fns  (0) 2025.04.24
브라우저 저장소 정리: localStorage vs sessionStorage vs cookie  (0) 2025.04.24
자바스크립트 debounce와 throttle 차이 및 성능 최적화 예제  (0) 2025.04.24
자바스크립트 IIFE 패턴(즉시 실행 함수 표현식)의 쓰임새와 모던 대안  (0) 2025.04.24
자바스크립트 클로저(Closure)의 개념과 실전 활용 예제  (0) 2025.04.24
자바스크립트 비동기 처리 개념 정리(setTimeout, Promise, async/await)  (0) 2025.04.23
'Programing/javascript' 카테고리의 다른 글
  • 자바스크립트 날짜 다루기: Date vs dayjs vs date-fns
  • 브라우저 저장소 정리: localStorage vs sessionStorage vs cookie
  • 자바스크립트 debounce와 throttle 차이 및 성능 최적화 예제
  • 자바스크립트 IIFE 패턴(즉시 실행 함수 표현식)의 쓰임새와 모던 대안
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    iT's MY LiFE
    IT 관련
    js패턴
    SQL
    php
    자바
    읽고 싶은 책
    기초
    Java
    jsp
    자바스크립트유틸
    사고 싶은 책
    IT블로그
    블로그
    위시리스트
    It
    자바스크립트
    디자인패턴
    IT·컴퓨터
    JavaScript
Dongkkase
자바스크립트 이벤트 위임(Event Delegation)과 성능 최적화
상단으로

티스토리툴바