이벤트 처리에서 옵저버와 이벤트 핸들러의 차이를 딥다이브 해보자!
개요

최근 옵저버와 이벤트 핸들러의 차이에 대해서 크게 신경쓰지 않다가, 최근에 크게 배우게 되는 일이 있었습니다.
다만, 모호한 부분이 있었어서 이 참에 다시금 정리하고자 글을 작성하게 되었습니다.
들어가기 전에..
한번쯤 떠올려보면 어떨까합니다. 이벤트 핸들러는 많이 사용해보셨을 것으로 예상되는데요.
그렇다면, 옵저버는 언제 사용해보셨나요?
- 무한 스크롤을 구현할 때 쓰는 InterSection Observer?
- 화면의 사이즈 조절을 감지할 때 쓰는 Resize Observer?
그렇다면, 여러분들은 이런 옵저버들을 왜 쓰셨나요?
Event Handler를 사용했을 때와 달리 어떤 장점이 있으셨나요?
한번쯤 떠올리고 다이브해봅시다!
옵저버(Observer)란 무엇인가?
여러분 옵저버란 무엇일까요?
혹시 어디서 들어보시진 않으셨나요?

스타크래프트에서 들어보셨다면.. 얼추 비슷하게 다가가셨습니다 ㅎㅎ.
옵저버는 말 그대로 "관찰자(Observer)"
입니다.
정확히는 "관찰자 패턴(Observer Pattern)"
에 기반한 메커니즘이지요.
그러면 여기서 무엇을 관찰할까요?
정답은 특정 대상의 상태 변화를 관찰합니다.
특정 대상의 상태 변화를 지속적으로 관찰하고, 변화가 감지되면 미리 등록된 콜백 함수를 실행하는 방식으로 동작하는게 옵저버입니다.
옵저버의 핵심 특징은 비동기적이고 지속적인 관찰입니다.
한 번 등록하면 조건이 충족될 때마다 자동으로 콜백이 실행되며, 개발자가 직접 상태를 확인할 필요가 없죠.
마치 보안 카메라가 움직임을 감지하면 자동으로 멈추는 것과 비슷합니다.
한번 IntersectionObserver를 예로 들어볼까요?
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
console.log('요소가 화면에 나타났습니다!');
// 여기서 실행되는 콜백은 브랑줘의 최적화된 타이밍에 따라 실행됩니다.
}
});
});
observer.observe(document.querySelector('.target'));
위 코드를 많이들 사용하셨을거라고 생각되어요. 특정 요소가 화면 상에 감지되면, 콜백을 실행시키는 코드입니다.
여기서 다음 부분이 보이시나요?
observer.observe();
옵저버에게 어떤 것을 관찰하라고 시키는 겁니다. 여기서는 선택된 요소의 상태 변화를 감지하는 거라고 볼 수 잇겠네요.
IntersectionObserver는 DOM 요소가 뷰포트나 다른 요소와 교차하는 상황을 관찰합니다.
스크롤을 하거나, 요소의 위치가 변경될 때마다 자동으로 교차 상태를 확인하고, 조건에 맞으면 콜백을 실행하는 방식이죠.
이해가 안되어도 괜찮습니다. 이런게 있다 정도만 봐둡시다 ㅎㅎ.
이벤트 핸들러(Event Handler)란 무엇인가?
이벤트 핸들러는 이벤트 기반 프로그래밍의 핵심 요소입니다.
사용자의 클릭, 키보드 입력, 마우스 움직임 등 특정 이벤트가 발생했을 때 즉시 반응하여 콜백 함수를 실행합니다.
여기서의 핵심은 "즉시" 입니다. 이에 주목해주세요.
이벤트 핸들러의 특징은 즉각적이고 반응적인 실행입니다.
이벤트가 발생하는 순간 바로 콜백이 실행되며, 이벤트의 세부 정보(어떤 키를 눌렀는지, 어디를 클릭했는지 등)를 콜백 함수에 전달합니다.
// 이벤트 핸들러 예제
document.addEventListener('click', (event) => {
console.log('클릭 이벤트 발생!', event.target);
});
이벤트 핸들러에 대해서는 잘 알 것 같아서 간단히만 언급하고 넘어가겠습니다 ㅎㅎ.