Post

이벤트 위임

이벤트 위임(Event Delegation)의 중요성

▶ 이벤트 위임(Event Delegation)은 자바스크립트 이벤트 처리 기법 중 하나로, 상위 요소에 이벤트 리스너를 설정하여 하위 요소들의 이벤트를 처리하는 방식을 말합니다. 보통 이 기법은 특히 동적으로 생성되는 요소들이 많을 때 유용한데 이를 바탕으로 메모리 사용을 최적화하고 성능을 향상시키는 데 도움을 줍니다.

1. 이벤트 위임의 작동 원리

▶ 이벤트 위임은 이벤트 버블링(Event Bubbling) 메커니즘을 기반으로 하는데, 이벤트 버블링이란 특정 요소에서 발생한 이벤트가 상위 요소들로 전파되는 현상을 말합니다. 예를 들어, ‘button’ 요소에서 클릭 이벤트가 발생하면 이 이벤트는 해당 ‘button’의 상위 요소인 ‘div’, ‘body’, ‘html’ 순으로 전파됩니다.

2. 이벤트 위임의 예시

▶ HYML구조

1
2
3
4
5
<div id="button-container">
  <button>Button 1</button>
  <button>Button 2</button>
  <button>Button 3</button>
</div>

▶ Javascript구조

1
2
3
4
5
document.getElementById('button-container').addEventListener('click', function(event) {
  if (event.target.tagName === 'BUTTON') {
    console.log(`${event.target.textContent} clicked`);
  }
});
  • 위의 예시에서 #button-container 요소에 클릭 이벤트 리스너를 설정하였습니다.
  • 이 때, 클릭 이벤트가 발생하면 이벤트 객체 event의 target 속성을 검사하여 클릭된 요소가 ‘button’인지 확인한 후, 해당 버튼의 텍스트 내용을 출력합니다.

3. 이벤트 위임의 장점

  1. 메모리 사용 감소
    개별 요소마다 이벤트 리스너를 설정하는 대신, 상위 요소 하나에만 리스너를 설정하여 메모리 사용을 줄일 수 있습니다.
  2. 동적으로 생성된 요소 처리
    DOM 트리에 나중에 추가된 요소들도 이벤트를 처리할 수 있어, 동적인 웹 애플리케이션에서 특히 유용합니다.
  3. 코드 유지보수 용이
    중앙에서 이벤트 처리가 가능하여, 코드의 복잡성이 줄어들고 유지보수가 쉬워집니다.

4. 이벤트 위임의 사용 사례

  1. 동적 리스트 항목
    AJAX로 데이터를 가져와 리스트 항목을 동적으로 추가하는 경우, 이벤트 위임을 사용하여 새로 추가된 항목들의 이벤트를 처리할 수 있습니다.
  2. 폼 입력 검증
    폼의 여러 입력 필드에 대한 검증 로직을 상위 폼 요소에 설정하여 관리할 수 있습니다.
  3. 메뉴 및 내비게이션
    메뉴 항목이 동적으로 생성되거나 변경되는 경우, 이벤트 위임을 통해 효율적으로 클릭 이벤트를 처리할 수 있습니다.

5. 주의사항

  1. 이벤트 대상 확인
    이벤트 위임을 사용할 때는 event.target을 통해 이벤트가 발생한 실제 대상을 확인하고, 필요한 경우 조건문을 사용하여 특정 요소에 대해서만 이벤트를 처리해야 합니다.
  2. 이벤트 전파 차단
    특정 상황에서는 이벤트 버블링을 차단해야 할 수도 있다. 이 경우 event.stopPropagation() 메서드를 사용할 수 있습니다.

6. 결론

▶ 이벤트 위임은 상위 요소에 이벤트 리스너를 설정하여 하위 요소들의 이벤트를 효율적으로 처리하는 강력한 기법입니다.
이를 통해 메모리 사용을 최적화하고, 동적으로 생성되는 요소들도 쉽게 관리할 수 있으며, 코드의 유지보수성을 향상시킬 수 있고
더 나아가 다양한 웹 애플리케이션에서 이벤트 위임을 적절히 활용하면 성능과 효율성을 크게 향상시킬 수 있습니다.


이렇게 오늘은 이벤트 위임에 대해 알아봤는데요,
면접에서도 충분히 나올 수 있는 질문이기 때문에 미리 공부해두면 좋을 것 같네요!
그렇다면 저는 다음에 또다른 면접에 대비한 내용을 들고오도록 하겠습니다 😁!

This post is licensed under CC BY 4.0 by the author.