Develop

[Javascript] jQuery 이벤트의 동적 바인딩과 정적 바인딩

issuemaker99 2024. 10. 2. 14:30
728x90

JavaScript를 사용하여 HTML 요소에 이벤트를 연결할 때, jQuery에서는 두 가지 방식으로 이벤트를 바인딩할 수 있습니다: 정적 바인딩 동적 바인딩입니다. 각각의 차이를 이해하고 적절히 사용하는 것은 웹 애플리케이션 개발에서 매우 중요합니다. 


1. 정적 바인딩 (Static Binding)

정적 바인딩은 페이지가 로드된 후 특정 요소에 대해 이벤트를 직접 바인딩하는 방식입니다. 즉, DOM에 이미 존재하는 요소에 대해서만 이벤트가 바인딩됩니다. 이 방식에서는 새로운 요소가 동적으로 추가되면, 해당 요소에는 이벤트가 바인딩되지 않습니다.

예제: 정적 바인딩

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>정적 바인딩</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function(){
            // 기존의 button 요소에 클릭 이벤트 바인딩
            $("#static-button").click(function(){
                alert("정적 바인딩된 버튼 클릭!");
            });
        });
    </script>
</head>
<body>
    <button id="static-button">정적 버튼</button>
    <button id="add-button">새 버튼 추가</button>
</body>
</html>

위 코드에서는 #static-button 요소에만 클릭 이벤트가 바인딩되어 있습니다. 즉, 페이지가 로드될 때 해당 요소가 DOM에 이미 존재하므로 이벤트가 연결됩니다. 그러나 새로운 요소를 동적으로 추가할 경우, 이벤트는 자동으로 바인딩되지 않습니다.

문제점

아래와 같이 버튼을 동적으로 추가하는 코드를 실행한다고 가정합시다.

$('#add-button').click(function(){
    $('body').append('<button class="dynamic-button">동적 버튼</button>');
});

위 코드를 실행하면 새로운 버튼이 추가되지만, 이 버튼은 정적 바인딩이 적용되지 않아 클릭해도 아무런 동작을 하지 않습니다.

 


2. 동적 바인딩 (Dynamic Binding)

동적 바인딩은 DOM에 존재하는 요소뿐만 아니라 나중에 추가되는 요소들에 대해서도 이벤트를 바인딩할 수 있는 방식입니다. on() 메서드를 사용하여 동적으로 생성되는 요소에도 이벤트를 바인딩할 수 있습니다. 이 방식은 페이지가 동적으로 요소를 추가하는 SPA(Single Page Application) 같은 애플리케이션에서 특히 유용합니다.

예제: 동적 바인딩

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>동적 바인딩</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(document).ready(function(){
            // 동적으로 생성된 버튼에도 클릭 이벤트를 바인딩
            $(document).on('click', '.dynamic-button', function(){
                alert("동적 바인딩된 버튼 클릭!");
            });

            $('#add-button').click(function(){
                $('body').append('<button class="dynamic-button">동적 버튼</button>');
            });
        });
    </script>
</head>
<body>
    <button id="add-button">새 버튼 추가</button>
</body>
</html>

이 예제에서 우리는 on() 메서드를 사용하여 document에 이벤트를 위임합니다. 이렇게 하면 나중에 DOM에 추가된 .dynamic-button 클래스의 모든 요소에도 클릭 이벤트가 자동으로 바인딩됩니다. 이제 페이지 로드 후 버튼을 추가해도 이벤트가 정상적으로 동작합니다.

 


  • 정적 바인딩: 페이지 로드 시점에 DOM에 존재하는 요소에만 이벤트를 바인딩합니다. 동적으로 추가된 요소에는 이벤트가 자동으로 바인딩되지 않습니다.
  • 동적 바인딩: on() 메서드를 사용하여, 나중에 추가되는 요소에도 이벤트를 바인딩할 수 있습니다. 동적으로 요소가 추가되는 경우에 유용합니다.

언제 정적 바인딩과 동적 바인딩을 사용할까?

  • 정적 바인딩: 페이지가 처음 로드될 때 필요한 요소에만 이벤트를 바인딩하는 경우에 적합합니다. DOM에 변화가 없을 때 사용하면 성능적으로도 유리할 수 있습니다.
  • 동적 바인딩: 페이지 로드 이후에도 새로운 요소가 추가되거나 제거되는 동적인 웹 애플리케이션에서 필수적입니다.

두 방식 모두 적절한 상황에서 사용해야 성능을 최적화하고, 예상치 못한 버그를 방지할 수 있습니다.

LIST