Event-Driven Programming이란?
이벤트 응답으로 코드를 작동 시키는 패러다임으로, 자바스크립트에서는 주로 유저에 의한 응답이 있다.
대표적으로 dom에 addEventListener를 하여 해당 이벤트가 발생했을때 실행되는 콜백함수도 대표적인 Event-Driven이다.
addEventListener란?
자바스크립트에서 dom에 event listener를 붙이는 메서드이다. addEventListenr을 사용하기 위해선
element.addEventListener(eventName,callback, options) 와 같은 문법을 사용하면 된다.
option은 생략이 가능하며, 기본값은 false이다.
기본적으로 흔하게 사용되는 addEventListener은 아래와 같은 방법일 것이다.
const button = document.querySelector("button");
button.addEvenListener("click",onClick);
function onClick(event) {
console.log('클릭됨');
}
위 처럼 코드를 짤 경우 기본적으로 이벤트 버블링이 발생하여, 자식 노드에서 부모 노드로 이벤트가 전파되는 방식이 된다.
하지만 만약 아래와 같이 3번째 인자에 true를 주게 된다면?
button.addEvenListener("click",onClick,true);
이것은 이벤트 버블링 방식이 아닌 캡쳐링 방식으로 사용하겠다는 것이다.
캡쳐링은 버블링과 반대로 부모에서부터 출발하여 자식으로 이벤트가 전파되는 것이다.
그리고 그냥 boolean 값만 할당할 수 있는 것이아니라 아래와 같이 객체형태로 옵션을 전달할 수 도 있다.
const abortController = new AbortController();
button.addEvenListener("click",onClick,{
capture:true,
once:true,
passive:false,
signal:abortController.signal
});
결론
아마 일반적인 addEventListener를 사용하여 이벤트를 할당하고 그에 맞는 로직을 처리하는 일들은 모든 프론트엔드개발자들이 다 할줄 아는 것일거다. 하지만 몇몇분들은 3번째 인자에 대한것을 모를 수도 있을것이다. capture에 관한건 알아도 그 안에있는 나머지 3개의 프로퍼티 역할을 모를 수도 있을 것이다.
때때로 이것은 굳이 함수를 일일이 넣어서 removeEvent를 해줄 필요도 없어 편리하며, 모바일 스크롤시 passive로 최적화도 가능하기때문에 나름 유용한 옵션들이다. 상황에 맞게 잘 사용하면 조금더 섹시한 프로그래밍이 되지 않을까 생각된다.