본문 바로가기

전지적라온시점

Javascript 이벤트 처리 완벽 가이드 본문

Development/Javascript

Javascript 이벤트 처리 완벽 가이드

최라온 2025. 5. 12. 20:00
728x90
반응형
SMALL

Javascript 이벤트 처리 완벽 가이드

자바스크립트에서 이벤트는 사용자와 웹 페이지 간의 상호작용을 처리하는 중요한 방법입니다. 예를 들어, 버튼을 클릭하거나 입력 필드에 텍스트를 입력하는 등의 작업은 이벤트로 처리됩니다. 이 글에서는 자바스크립트에서 이벤트를 처리하는 방법에 대해 자세히 알아보겠습니다.

1. 이벤트란?

이벤트는 웹 페이지에서 발생하는 상호작용을 나타냅니다. 대표적인 이벤트에는 클릭, 마우스 오버, 키 입력 등이 있습니다. 자바스크립트는 이러한 이벤트가 발생할 때 이를 처리하는 방법을 제공합니다.

2. 이벤트 리스너 사용법

자바스크립트에서 이벤트를 처리하는 가장 기본적인 방법은 addEventListener() 메서드를 사용하는 것입니다. 이 메서드를 사용하여 특정 이벤트가 발생했을 때 실행할 콜백 함수를 지정할 수 있습니다.

<button id="myButton">클릭하세요</button>

<script>
    const button = document.getElementById("myButton");
    
    button.addEventListener("click", function() {
        alert("버튼이 클릭되었습니다!");
    });
</script>
        

3. 이벤트 객체

이벤트가 발생할 때, 자바스크립트는 이벤트 객체를 생성하여 이벤트에 대한 추가 정보를 제공합니다. 이 객체는 이벤트가 발생한 요소, 이벤트 타입, 마우스 좌표 등 여러 가지 정보를 포함하고 있습니다.

<button id="myButton">클릭하세요</button>

<script>
    const button = document.getElementById("myButton");
    
    button.addEventListener("click", function(event) {
        console.log("클릭한 요소:", event.target);  // 클릭한 버튼 요소
        console.log("이벤트 타입:", event.type);   // 클릭 이벤트
    });
</script>
        

4. 이벤트 전파: 버블링과 캡처링

이벤트는 발생한 요소에서부터 부모 요소로 전파되거나, 그 반대로 전파될 수 있습니다. 이를 이벤트 버블링(bubbling)과 이벤트 캡처링(capturing)이라고 합니다.

  • 버블링: 이벤트는 가장 작은 요소에서 시작해 상위 요소로 전파됩니다.
  • 캡처링: 이벤트는 가장 상위 요소에서 시작해 하위 요소로 전파됩니다.

기본적으로 자바스크립트는 이벤트 버블링 방식을 사용합니다. 하지만 addEventListener 메서드의 세 번째 인자에 true를 설정하면 캡처링 방식으로 전파됩니다.

<div id="parent">
    <button id="child">버튼 클릭</button>
</div>

<script>
    const parent = document.getElementById("parent");
    const child = document.getElementById("child");

    // 이벤트 버블링
    parent.addEventListener("click", function() {
        alert("부모 요소가 클릭되었습니다!");
    });

    // 이벤트 캡처링
    parent.addEventListener("click", function() {
        alert("부모 요소가 캡처링되었습니다!");
    }, true);
    
    child.addEventListener("click", function() {
        alert("버튼이 클릭되었습니다!");
    });
</script>
        

5. 이벤트 위임

이벤트 위임(Event Delegation)은 상위 요소에 이벤트를 한 번만 등록하고, 하위 요소에서 발생하는 이벤트를 처리하는 기법입니다. 이렇게 하면 여러 개의 하위 요소에 개별적으로 이벤트를 등록할 필요 없이 하나의 상위 요소에서 모든 이벤트를 처리할 수 있습니다.

<ul id="list">
    <li>항목 1</li>
    <li>항목 2</li>
    <li>항목 3</li>
</ul>

<script>
    const list = document.getElementById("list");

    list.addEventListener("click", function(event) {
        if (event.target.tagName === "LI") {
            alert(`리스트 항목 ${event.target.textContent} 클릭!`);
        }
    });
</script>
        

6. 이벤트 핸들러와 화살표 함수

이벤트 핸들러를 정의할 때, 화살표 함수(Arrow Function)를 사용하면 this의 동작이 달라질 수 있습니다. 일반 함수에서는 this가 이벤트를 발생시킨 요소를 가리키지만, 화살표 함수에서는 this가 외부의 this를 그대로 유지합니다.

<button id="myButton">클릭하세요</button>

<script>
    const button = document.getElementById("myButton");

    // 일반 함수
    button.addEventListener("click", function() {
        console.log(this);  // 이벤트를 발생시킨 버튼 요소
    });

    // 화살표 함수
    button.addEventListener("click", () => {
        console.log(this);  // window 객체(전역 객체) 또는 부모 스코프의 this
    });
</script>
        

7. 에러 처리 및 최적화

이벤트 처리 중에 발생할 수 있는 예외를 처리하는 것은 매우 중요합니다. 이벤트 핸들러 내부에서 오류가 발생하면 전체 페이지가 멈추거나 예기치 않게 동작할 수 있기 때문입니다.

<button id="myButton">클릭하세요</button>

<script>
    const button = document.getElementById("myButton");

    button.addEventListener("click", function() {
        try {
            // 오류 발생 가능 코드
            throw new Error("알 수 없는 오류 발생!");
        } catch (error) {
            console.error("에러 발생:", error);
        }
    });
</script>
        

또한, 이벤트 리스너는 불필요하게 많은 이벤트를 등록하지 않도록 주의해야 합니다. 이벤트 위임, 이벤트의 최적화 등을 고려하여 성능을 개선할 수 있습니다.

728x90
반응형
LIST