이벤트(Event)와 이벤트 처리기(Event Handler) 개념 정리

1. 이벤트(Event)

이벤트는 브라우저사용자가 수행하는 행동을 말합니다. 예를 들어, 마우스 클릭, 키보드 입력, 페이지가 로드되는 것 등이 모두 이벤트에 해당합니다. 웹 페이지에서 특정 동작이 발생할 때 이벤트를 발생시키고, 그 이벤트에 반응하여 특정 작업을 실행하게 할 수 있습니다.

대표적인 이벤트:

  • click: 사용자가 요소를 클릭했을 때 발생
  • mouseover: 마우스를 요소 위에 올렸을 때 발생
  • keydown: 키보드를 눌렀을 때 발생
  • load: 페이지나 리소스가 모두 로드되었을 때 발생

2. 이벤트 처리기(Event Handler)

이벤트 처리기는 이벤트가 발생할 때 실행되는 함수입니다. 이벤트가 발생하면 해당 이벤트 처리기가 호출되어, 지정된 작업을 수행합니다. 이벤트 처리기는 주로 특정 HTML 요소에 바인딩되어, 그 요소에서 특정 이벤트가 발생할 때 호출됩니다.


이벤트 처리 방법

1. HTML 속성에서 직접 이벤트 처리기 작성

HTML 요소의 속성으로 직접 이벤트 처리기를 지정할 수 있습니다.

<button onclick="alert('버튼이 클릭되었습니다!')">Click Me</button>
  • onclick 속성은 클릭 이벤트가 발생했을 때 실행할 코드를 지정합니다.

2. 자바스크립트에서 이벤트 처리기 추가

  • addEventListener(): 자바스크립트에서 이벤트를 처리하는 더 좋은 방법은 addEventListener() 메서드를 사용하는 것입니다. 이를 통해 다양한 이벤트를 처리할 수 있으며, 이벤트 핸들러를 동적으로 추가하거나 제거할 수 있습니다.
const button = document.querySelector("button");
button.addEventListener("click", function() {
    alert("버튼이 클릭되었습니다!");
});

3. 이벤트 처리기 함수 분리

이벤트 처리기를 함수로 분리하여 깔끔하게 코드를 작성할 수 있습니다.

function handleClick() {
    alert("버튼이 클릭되었습니다!");
}

const button = document.querySelector("button");
button.addEventListener("click", handleClick);

4. 이벤트 객체(Event Object)

이벤트가 발생하면 브라우저는 이벤트와 관련된 정보를 담은 이벤트 객체를 자동으로 생성합니다. 이 객체를 통해 추가 정보를 얻을 수 있습니다. 예를 들어, 이벤트가 발생한 위치타겟 요소 등 다양한 정보를 얻을 수 있습니다.

const button = document.querySelector("button");

button.addEventListener("click", function(event) {
    console.log(event.target); // 이벤트가 발생한 요소
    console.log(event.type);   // 이벤트의 타입 (예: 'click')
});

주요 이벤트와 이벤트 처리 예시

1. click 이벤트

사용자가 버튼을 클릭했을 때 이벤트를 처리하는 예시입니다.

<button id="myButton">Click Me</button>

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

    button.addEventListener("click", function() {
        alert("Button clicked!");
    });
</script>

2. mouseover 이벤트

마우스를 요소 위에 올리면 이벤트가 발생합니다.

<div id="hoverDiv" style="width:200px; height:100px; background-color:lightblue;">Hover over me</div>

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

    hoverDiv.addEventListener("mouseover", function() {
        hoverDiv.style.backgroundColor = "yellow";
    });

    hoverDiv.addEventListener("mouseout", function() {
        hoverDiv.style.backgroundColor = "lightblue";
    });
</script>

3. keydown 이벤트

사용자가 키보드를 눌렀을 때 발생하는 이벤트입니다.

<input type="text" id="inputField" placeholder="Type something..." />

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

    inputField.addEventListener("keydown", function(event) {
        console.log("You pressed: " + event.key);
    });
</script>

4. load 이벤트

웹 페이지의 모든 리소스가 로드된 후에 실행됩니다.

<script>
    window.addEventListener("load", function() {
        console.log("Page fully loaded!");
    });
</script>

추가 개념

1. 이벤트 위임(Event Delegation)

많은 요소에 동일한 이벤트 처리기를 추가하는 대신, 부모 요소에 이벤트 처리기를 한 번만 등록하고 하위 요소의 이벤트를 처리하는 기법을 이벤트 위임이라고 합니다. 이 방법을 사용하면 성능을 최적화할 수 있습니다.

<ul id="myList">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>

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

    list.addEventListener("click", function(event) {
        if (event.target.tagName === "LI") {
            alert("You clicked on " + event.target.textContent);
        }
    });
</script>

2. 이벤트 버블링(Event Bubbling)과 캡처링(Event Capturing)

이벤트는 특정 요소에서 발생하면, 그 이벤트는 부모 요소로 전파됩니다. 이 과정을 이벤트 버블링이라고 하며, 기본 동작입니다. 반대로, 이벤트가 부모 요소에서 자식 요소로 전파되는 것을 이벤트 캡처링이라고 합니다.

이 두 방식을 제어하려면 addEventListener()의 세 번째 인자로 true(캡처링) 또는 false(버블링)를 설정할 수 있습니다.

element.addEventListener("click", handler, true);  // 캡처링
element.addEventListener("click", handler, false); // 버블링 (기본값)

정리

  • 이벤트는 웹 페이지에서 발생하는 행동이고, 이벤트 처리기는 그 행동에 반응하여 실행되는 함수입니다.
  • 이벤트 처리기를 등록하는 방법은 여러 가지가 있지만, addEventListener()가 가장 많이 사용됩니다.
  • 이벤트 객체를 통해 이벤트와 관련된 다양한 정보를 얻을 수 있습니다.
  • 이벤트 위임버블링/캡처링을 이해하면, 복잡한 이벤트 처리를 더욱 효율적으로 작성할 수 있습니다.

'Javascript' 카테고리의 다른 글

Fetch API  (0) 2024.11.11
백틱(Backtick, ```)  (0) 2024.10.14
문서 객체 모델 (DOM)  (1) 2024.10.04
프로퍼티(Property)와 메서드(Method) 그리고 배열(Arrays)  (0) 2024.10.04
자바스크립트 기초 정리  (0) 2024.10.04

+ Recent posts