์ด๋ฒคํŠธ ๋ฐ”์ธ๋”ฉ์ด๋ž€?

์ด๋ฒคํŠธ ๋ฐ”์ธ๋”ฉ์€ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์™€ ๊ทธ ํ›„์— ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๋ฐ”์ธ๋”ฉ์ด๋Š” ์ด 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, HTML์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ, ์ „ํ†ต์ ์ธ DOMํ•ธ๋“ค๋Ÿฌ, EventListener์„ ์ด์šฉํ•œ ํ•ธ๋“ค๋Ÿฌ๊ฐ€์žˆ์Šต๋‹ˆ๋‹ค.

HTML ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML Event Handler Example</title>
<style>
    button {
        padding: 10px 20px;
        font-size: 16px;
        cursor: pointer;
    }
</style>
</head>
<body>

<!-- HTML ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„ํŠผ์— ์ง์ ‘ ์ด๋ฒคํŠธ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. -->
<button onclick="handleClick()">Click me</button>

<script>
    // ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    function handleClick() {
        console.log('Button clicked!');
    }
</script>

</body>
</html>
        
์ด ์˜ˆ์ œ๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” HTML ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋ฒ„ํŠผ ์š”์†Œ์˜ onclick ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฐ”๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ HTML๊ณผ JavaScript๊ฐ€ ํ˜ผ์šฉ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ถ”์ฒœ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€์‹  JavaScript ์ฝ”๋“œ์—์„œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

์ „ํ†ต์ ์ธ DOM ํ•ธ๋“ค๋Ÿฌ

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>DOM Event Handler Example</title>
<style>
    button {
        padding: 10px 20px;
        font-size: 16px;
        cursor: pointer;
    }
</style>
</head>
<body>

<!-- DOM ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„ํŠผ์— ์ด๋ฒคํŠธ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. -->
<button id="myButton">Click me</button>

<script>
    // ๋Œ€์ƒ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    const myButton = document.getElementById('myButton');

    // ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    function handleClick(event) {
        console.log('Button clicked!');
        console.log('Event:', event);
    }

    // DOM ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
    myButton.onclick = handleClick;
</script>

</body>
</html>
        
์ด ์˜ˆ์ œ๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ „ํ†ต์ ์ธ DOM ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋ฒ„ํŠผ ์š”์†Œ์˜ onclick ์†์„ฑ์— ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ HTML ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ๋‹ฌ๋ฆฌ JavaScript ์ฝ”๋“œ๋กœ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋ฏ€๋กœ HTML๊ณผ JavaScript์˜ ํ˜ผ์šฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ์— ํ•˜๋‚˜์˜ ํ•ธ๋“ค๋Ÿฌ๋งŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ณ , ํ•ธ๋“ค๋Ÿฌ์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€๋œ ํ•ธ๋“ค๋Ÿฌ๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

EventListener์„ ์ด์šฉํ•œ ํ•ธ๋“ค๋Ÿฌ

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Event Binding Example</title>
<style>
    button {
        padding: 10px 20px;
        font-size: 16px;
        cursor: pointer;
    }
</style>
</head>
<body>

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

<script>
    // ๋Œ€์ƒ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    const myButton = document.getElementById('myButton');

    // ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    function handleClick(event) {
        console.log('Button clicked!');
        console.log('Event:', event);
    }

    function handleAnotherClick(event) {
        console.log('Another button clicked!');
        console.log('Event:', event);
    }

    // addEventListener๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.
    myButton.addEventListener('click', handleClick);
    myButton.addEventListener('click', handleAnotherClick);

    // ์ด๋ฒคํŠธ๋ฅผ ์บก์ณ๋งํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    myButton.addEventListener('click', function(event) {
        console.log('Capturing event...');
    }, true);

    // ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
    // myButton.removeEventListener('click', handleClick);

    // ๋‹ค์ˆ˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    // ๋‹ค์Œ ์ฝ”๋“œ๋Š” ์œ„์˜ ์ฝ”๋“œ์™€ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.
    // myButton.onclick = handleClick;
    // myButton.onclick = handleAnotherClick;

    </script>

</body>
</html>
์ด ์˜ˆ์ œ๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ addEventListener๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ณ , ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์บก์ณ๋ง๊ณผ ๋ฒ„๋ธ”๋ง์„ ์ง€์›ํ•˜๋ฉฐ, HTML๋ฟ๋งŒ ์•„๋‹ˆ๋ผ DOM ์š”์†Œ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.