[javascript] 이벤트 처리 중복 방지하기

자바스크립트로 개발을 진행하다보면 이벤트 핸들러가 여러 번 중복으로 등록되는 문제를 종종 겪을 수 있습니다. 이런 상황은 버그를 일으키거나 성능 저하로 이어질 수 있기 때문에 중복 등록을 방지하는 방법을 살펴봐야 합니다.

이벤트 중복 등록 문제 확인

먼저, 간단한 예제를 통해 이벤트 중복 등록 문제를 확인해보겠습니다.

const button = document.getElementById('submit-btn');
button.addEventListener('click', () => {
  console.log('Button clicked');
});
button.addEventListener('click', () => {
  console.log('Button clicked again');
});

위의 코드에서 submit-btn 아이디를 가진 버튼을 클릭할 때마다 두 개의 이벤트 핸들러가 실행됩니다. 이는 이벤트 핸들러가 중복으로 등록된 것을 보여줍니다.

이벤트 중복 등록 방지

이벤트 중복 등록 문제를 방지하기 위해, 최초 등록된 이벤트 핸들러가 이미 존재하는지를 체크하고, 없을 경우에만 등록하도록 코드를 작성할 수 있습니다.

const button = document.getElementById('submit-btn');
const onClick = () => {
  console.log('Button clicked');
  button.removeEventListener('click', onClick);
};
button.addEventListener('click', onClick);

위의 코드에서는 addEventListener를 통해 지정된 이벤트 핸들러를 독립적인 함수로 정의하고, 해당 이벤트가 발생할 때 호출된 후 removeEventListener를 사용하여 등록을 제거합니다.

결론

이벤트 핸들러의 중복 등록은 예기치 않은 동작을 초래할 수 있으므로 주의 깊게 다뤄져야 합니다. 중복 등록을 방지하기 위해 코드를 작성할 때는 이미 등록된 이벤트 핸들러에 대한 체크 또는 removeEventListener를 이용하여 중복 등록을 방지할 수 있습니다.

참고 자료: MDN web docs - EventTarget.removeEventListener

위 방법을 통해 이벤트 핸들러의 중복 등록 문제를 효과적으로 해결할 수 있습니다.