thumbnail
์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง, ์˜ˆ์™ธ์ฒ˜๋ฆฌ
Front-End
2023.07.17.

ํ‘œ์ค€ ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ ๋ฐฉ์‹

/*
	1. ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ ๋ฐฉ์‹์„ ํ‘œ์ค€ ์ด๋ฒคํŠธ ์—ฐ๊ฒฐ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ
	2. ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋””ํดํŠธ ์ œ๊ฑฐ ํ…Œ์ŠคํŠธ
	3. ํ‘œ์ค€ ์ด๋ฒคํŠธ ๋ฐฉ์‹์—์„œ๋Š” ์ด๋ฒคํŠธ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด preventDefault() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ
*/

function handler(event) {
    var id = document.querySelector('#id');
    var pw = document.querySelector('#pw');
    var newPw = document.querySelector('#newPw');
    var rePw = document.querySelector('#rePw');
    var msg = document.querySelector('#msg');

    if (id.value.length >= 3 && pw.value.length >= 3 && newPw.value.length >= 3 && rePw.value.length >= 3 && pw.value !== newPw.value && newPw.value === rePw.value) {

    } else {
        id.value = '';
        pw.value = '';
        newPw.value = '';
        rePw.value = '';

        msg.innerHTML = '์‹คํŒจ';
        msg.style.color = 'red';
        id.focus();

        event.preventDefault();
    }
}

function init() {
    document.querySelector('#changePw').addEventListener('submit', handler);
}

window.addEventListener('load', init);

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๊ณผ stopPropagation()

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง(7/15 ์ˆ˜์—…๋‚ด์šฉ)

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ํ•˜์œ„ ์š”์†Œ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ๋กœ ์ „๋‹ฌ๋˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ HTML ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.

<div id="outer">
  <div id="inner">
    <button>Click me</button>
  </div>
</div>

๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋ฒ„ํŠผ์—์„œ click ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ๋ฐœ์ƒํ•˜๋ฉด์„œ ๋ฒ„ํŠผ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ์ธ div#inner๋กœ ์ „๋‹ฌ๋˜๊ณ , ๋‹ค์‹œ div#inner์—์„œ div#outer๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

    document.querySelector('#outer').addEventListener('click', function() {
      console.log('outer');
    });
    
    document.querySelector('#inner').addEventListener('click', function() {
      console.log('inner');
    });
    
    document.querySelector('button').addEventListener('click', function() {
      console.log('button');
    });

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ ์ฝ˜์†”์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

button
inner
outer

stopPropagation()

stopPropagation() ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฒคํŠธ์˜ ๋ฒ„๋ธ”๋ง์„ ์ค‘์ง€์‹œํ‚ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ HTML ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.

<div id="outer">
    <div id="inner">
        <button>Click me</button>
    </div>
</div>

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.

document.querySelector('#outer').addEventListener('click', function () {
    console.log('outer');
});

document.querySelector('#inner').addEventListener('click', function (event) {
    console.log('inner');
    event.stopPropagation();
});

document.querySelector('button').addEventListener('click', function () {
    console.log('button');
});

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ ์ฝ˜์†”์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

button
inner

div#inner์˜ click ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ stopPropagation() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด ์ค‘์ง€๋˜๊ณ , div#outer๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์ „ํŒŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์„ ์ด์šฉํ•œ ๋ฒ„ํŠผ ๊ตฌํ˜„

<body>
<h1>hello, world</h1>
<h2>์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง</h2>
<hr>
<div id="buttons">
    <button>Create</button>
    <br>
    <button>Read</button>
    <br>
    <button>Update</button>
    <br>
    <button>Delete</button>
    <br>
</div>

<script>
    function handler(event) {
        var content = event.target.innerHTML;
        // event.target ์„ ์ด์šฉํ•œ ์˜ˆ์ œ

        if (content === 'Create') {
            alert('์ƒ์„ฑ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•จ')
        } else if (content === 'Read') {
            alert('์ฝ๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•จ')
        } else if (content === 'Update') {
            alert('์—…๋ฐ์ดํŠธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•จ')
        } else if (content === 'Delete') {
            alert('์‚ญ์ œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•จ')
        }
    }

    function init() {
        document.querySelector('#buttons').addEventListener('click', handler)
    }

    window.onload = init;

</script>
</body>

SPA(Single Page-web Application)

SPA(Single Page-Web Application)๋ž€ ๋‹จ์ผ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด, ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง์ด ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. SPA๋Š” ๋น ๋ฅธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค(HTML, CSS, JavaScript)๋ฅผ ํ•œ ๋ฒˆ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ, ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

โ†’ AJAX๋Š” Asynchronous JavaScript and XML์˜ ์•ฝ์ž๋กœ, ๋น„๋™๊ธฐ์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์›น ๊ฐœ๋ฐœ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•  ํ•„์š” ์—†์ด ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋” ๋ฐ˜์‘์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AJAX๋Š” ํ˜„๋Œ€์ ์ธ ์›น ๊ฐœ๋ฐœ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉฐ, ํŠนํžˆ ๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA)์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. SPA๋Š” ๋‹จ์ผ HTML ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•จ์— ๋”ฐ๋ผ ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋‹ค์‹œ ๋กœ๋“œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋Š” ๋” ๋น ๋ฅธ ๋กœ๋“œ ์‹œ๊ฐ„๊ณผ ํŽ˜์ด์ง€ ๊ฐ„์˜ ๋ถ€๋“œ๋Ÿฌ์šด ์ „ํ™˜์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AJAX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธก Javacript ์ฝ”๋“œ์™€ ์„œ๋ฒ„ ์ธก ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ†ต์‹ ์€ ์ผ๋ฐ˜์ ์œผ๋กœ JSON(JavaScript Object Notation) ๋˜๋Š” XML( Extensible Markup Language)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AJAX๋Š” ๋น ๋ฅด๊ณ  ๋ฐ˜์‘์„ฑ์ด ๋†’์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. AJAX๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…(XSS) ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ ์ ˆํ•˜๊ฒŒ ๊ฒ€์ฆํ•˜๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„ ์ธก์—์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AJAX ์™ธ์—๋„, ๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ ์ธ๊ธฐ ์žˆ๋Š” ๋„๊ตฌ๋กœ๋Š” React๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. React๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React๋Š” ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง๋„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SEO์— ์นœํ™”์ ์ธ SPA๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ข‹์€ ์„ ํƒ์ง€์ž…๋‹ˆ๋‹ค. AJAX์™€ React๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ ์ด๊ณ  ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด ์›ํ™œํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ†’ React : SPA ํ™˜๊ฒฝ์—์„œ AJAX๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ์žฌ๊ตฌ์„ฑ ํ•˜๋Š” ๋ฐฉ๋ฒ• (JXS, Compornent๋ฅผ ์ด์šฉ)

์˜ˆ์™ธ์ฒ˜๋ฆฌ

์˜ˆ์™ธ(Exception)๋ž€ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์˜ค์ž‘๋™์„ ํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋˜๋Š” ์›์ธ์ด ๋˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ˆ์™ธ๋Š” ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž˜๋ชป๋œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜, ์กด์žฌํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด ์†์„ฑ์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜, ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” try-catch๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. try ๋ธ”๋ก ์•ˆ์—๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , catch ๋ธ”๋ก ์•ˆ์—๋Š” ํ•ด๋‹น ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, try ๋ธ”๋ก ์•ˆ์˜ ์ฝ”๋“œ ์‹คํ–‰์ด ์ค‘๋‹จ๋˜๊ณ , catch ๋ธ”๋ก์œผ๋กœ ์ œ์–ด๊ฐ€ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. catch ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ ํ›„, ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์† ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

function divide(a, b) {
    if (b === 0) {
        throw new Error('Divide by zero');
    }
    return a / b;
}

try {
    var result = divide(10, 0);
    console.log(result);
} catch (e) {
    console.log(e.message);
}

์œ„ ์ฝ”๋“œ๋Š” ์ˆซ์ž a๋ฅผ ์ˆซ์ž b๋กœ ๋‚˜๋ˆ„๋Š” divide ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ b๊ฐ€ 0์ด๋ฉด, ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. try ๋ธ”๋ก ์•ˆ์—์„œ divide ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ํ›„, catch ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, โ€œDivide by zeroโ€๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ฝ˜์†”์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์ด์™ธ์—๋„, ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” throw๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. throw๋ฌธ์€ ์˜ˆ์™ธ๋ฅผ ๊ฐ•์ œ๋กœ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

function func() {
    throw new Error('Something went wrong');
}

try {
    func();
} catch (e) {
    console.log(e.message);
}

์œ„ ์ฝ”๋“œ๋Š” func ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. try ๋ธ”๋ก์—์„œ func ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , catch ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, โ€œSomething went wrongโ€๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ฝ˜์†”์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ์ด ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ ์ข…๋ฃŒ{๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ฝ˜์†”๋กœ ํ™•์ธํ•ด๋ณด๊ธฐ

try {
    console.log('[1] ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์ „');
    console.log('[2]' + (4 + num));
    console.log('[3] ์˜ค๋ฅ˜ ๋ฐœ์ƒ ํ›„');
} catch (e) {
    console.log('[4] ์—๋Ÿฌ ์ฒ˜๋ฆฌ');
}
console.log('[5] ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํ›„');

// 1, 4, 5 ์ฝ˜์†”์ฐฝ์— ํ‘œ์‹œ๋จ
Thank You for Visiting My Blog, Have a Good Day ๐Ÿ˜†
ยฉ 2023 Developer JaeHyeon, Powered By Gatsby.