๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript

(15)
[ JS ] e.stopPropagation ๊ณผ e.preventDefault ์ฐจ์ด ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ e.stopPropagation()๊ณผ e.preventDefault()๋Š” ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์•„์˜ˆ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ์ด๋‹ค.e.stopPropagation()์€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ƒ์œ„ ํƒœ๊ทธ์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ๋ง‰๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋‹ค์‹œ๋งํ•ด ์ด๋ฒคํŠธ์˜ ๋ฒ„๋ธ”๋ง์„ ์ค‘์ง€ํ•˜์—ฌ ํ˜„์žฌ ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ(๋ถ€๋ชจ)๋กœ ์ „ํŒŒ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.e.preventDefault() ๋Š” ๊ธฐ๋ณธ ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘์„ ๊ฐ€์ง„ ์ผ๋ถ€ ์ด๋ฒคํŠธ๊ฐ€ ํ•ด๋‹น ๊ธฐ๋ณธ ๋™์ž‘์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•œ๋‹ค. ๋ณดํ†ต ๋งํฌ ํด๋ฆญ ์‹œ ํŽ˜์ด์ง€ ์ด๋™๋ง‰๊ธฐ, ํผ ์ œ์ถœ์‹œ ํŽ˜์ด์ง€ ๋ฆฌ๋กœ๋“œ ๋ฐฉ์ง€๋“ฑ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์ œ์–ด ์—ญํ• ์„ ํ•œ๋‹ค.        e.stopPropagation() ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ๋ฒ„๋ธ”๋ง์„ ๋ฐฉ์ง€ํ•ด์ค€๋‹ค.( ๋ฒ„๋ธ”๋ง : ์ด๋ฒคํŠธ์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ€๋ชจ๋กœ (์•ˆ์ชฝ -> ๋ฐ”๊นฅ์ชฝ) ์ „ํŒŒ๋˜๋Š” ๊ฒƒ. ) ex..
[ JS ] Promise VS async await ๋น„๊ต ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฃผ์š” ๋ฐฉ์‹์ธ Promise์™€ async/await์— ๋Œ€ํ•ด ๋น„๊ตํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ํ‰์†Œ ์ž‘์—…์„ ํ•˜๋ฉด์„œ ๋‘˜์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์ฐจ์ด์ ๊ณผ ํŠน์ง•์„ ๋น„๊ตํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. (๋‘˜ ๋‹ค ES6+ ์ดํ›„์— ๋„์ž…๋˜์—ˆ๋‹ค.)    1. ๋ฌธ๋ฒ•   - Promise: `.then()`, `.catch()`, `.finally()` ๋ฉ”์„œ๋“œ๋ฅผ ์ฒด์ธ์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉ.   - async/await: ๋” ๋™๊ธฐ์ ์ธ ์ฝ”๋“œ ์Šคํƒ€์ผ์ด๋ฉฐ `try/catch` ๊ตฌ๋ฌธ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.  2. ๊ฐ€๋…์„ฑ   - Promise: ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ๋กœ์ง์—์„œ๋Š” ์ค‘์ฒฉ๋œ `.then()`์œผ๋กœ ์ธํ•ด "์ฝœ๋ฐฑ ์ง€์˜ฅ"๊ณผ ์œ ์‚ฌํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.   - async/await: ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ฝ๊ธฐ ์‰ฌ์šด ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ..
[ JS ] Event.stopPropagation์™€ Event.preventDefault ์˜ ์ฐจ์ด์  ์•Œ์•„๋ณด๊ธฐ. JavaScript์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์ข…์ข… ํ˜ผ๋™๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฉ”์„œ๋“œ์ธ Event.stopPropagation()๊ณผ Event.preventDefault()์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.     Event.stopPropagation()  `stopPropagation()` ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฒคํŠธ์˜ ๋ฒ„๋ธ”๋ง์„ ์ค‘์ง€์‹œํ‚จ๋‹ค.   element.addEventListener('click', function(event) { event.stopPropagation(); // ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋กœ์ง});  ์ฃผ์š” ํŠน์ง• )- ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.- ์ค‘์ฒฉ๋œ ์š”์†Œ์—์„œ ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค.   ์‚ฌ์šฉ ์˜ˆ์‹œ )์ค‘์ฒฉ๋œ div์—์„œ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ํ•ด๋‹น div์—์„œ๋งŒ ์ด..
[ TypeScript ] ํ˜‘์—…์„ ์œ„ํ•œ interface ์— ํžŒํŠธ ์ฃผ์„ ๋‹ฌ๊ธฐ. ts๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœ ์ค‘์— interface์— ์ถ”๊ฐ€์ ์ธ ์„ค๋ช…์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค~! ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ํ‰์†Œ์—๋Š” method๋‚˜ method parameter์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋‹ฌ์•„์ค„ ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋˜ JSDoc์„ ์ด์šฉํ•˜์—ฌ interface ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•ด ๋ณด์•˜๋‹ค. ๋จผ์ € JSDoc์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์ž๋ฉด, JSDoc์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์šฉ API ๋ฌธ์„œ ์ƒ์„ฑ๊ธฐ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ API๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. module, namespaces, classes, methods, method parameters ๋“ฑ๊ณผ ๊ฐ™์€ ํ•ญ๋ชฉ๋“ค์„ ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. JSDoc์€ ์ฝ”๋“œ ์ž์ฒด์™€ ํ•จ๊ป˜ ์†Œ์Šค์ฝ”๋“œ์— ์ง์ ‘ ๋ฌธ์„œ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค. JSDoc ์ฃผ์„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์„œํ™”ํ•˜๋ ค๋Š” ์ฝ”๋“œ ๋ฐ”๋กœ ์•ž์— ์œ„์น˜..
[TS] ํ”„๋กœ์ ํŠธ์— tsconfig ์„ค์ •ํ•˜๊ธฐ. ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ์„ธํŒ…ํ•  ๋•Œ, TypeScript ๋กœ ํƒ€์ž… ์ฒดํฌ๋ฅผ ์–ด๋””๊นŒ์ง€ ํ—ˆ์šฉํ• ์ง€, ์–ด๋–ค ์„ค์ •์œผ๋กœ ์šฐ๋ฆฌ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์“ธ์ง€ ๊ณ ๋ฏผํ•˜๋˜ ์ค‘ ํŒ€์›๋“ค(+๋‚˜)์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋Šฅ์ˆ™๋„๊ฐ€ ๊ทธ๋ฆฌ ๋†’์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์–ด ๊ธฐ๋ณธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ธํŒ…์„ ํ•˜๋ฉฐ ์“ฐ๋Š” ๊ธ€. tsconfig.json ์„ค์ • fucntion add(a,b){ return a+b; } add(10, null); // noImplicitAny ์„ค์ •์ด ๊บผ์ ธ์žˆ๋‹ค๋ฉด ์œ„์˜ ์ฝ”๋“œ๋Š” ํƒ€์ž…์ฒด์ปค๋ฅผ ํ†ต๊ณผํ•˜๊ณ , // noImplicitAny ์„ค์ •์ด ์ผœ์ ธ์žˆ๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋œ๋‹ค. **์œ„์˜ ์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์„ค์ •์— ๋”ฐ๋ผ ๋™์ผ ์ฝ”๋“œ๋ผ๋„ ํƒ€์ž… ์ฒด์ปค์˜ ํ†ต๊ณผ ๊ฐ€๋Šฅ์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์„ค์ •์ด 100๊ฐœ ๊ฐ€๊นŒ์ด ๋˜๊ธฐ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ค ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋Š”์ง€..
[ JavaScript ] async await ๋ฌธ๋ฒ• ES8์—์„œ ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋™๊ธฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” async/await๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค. async/await๋Š” ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, async/await๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๋ฏธ์Šค์˜ ํ›„์† ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ ์—†์ด ๋งˆ์น˜ ๋™๊ธฐ ์ฒ˜๋ฆฌ์ฒ˜๋Ÿผ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. async ํ•จ์ˆ˜๋Š” async ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ •์˜ํ•˜๊ณ , ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. async function asyncCall() { console.log('calling'); const result = await resolveAfter2Seconds(); console.log(result); // expected output: "resolved" } asyncCall(); await ํ‚ค์›Œ๋“œ๋Š”..
[ JavaScript / Promise ] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Promise์— ๋Œ€ํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ํƒœ์Šคํฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ ค๋ฉด ๊ณผ๊ฑฐ์—๋Š” ์ฃผ๋กœ ์ฝœ๋ฐฑ ํŒจํ„ด์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ฝœ๋ฐฑ ํŒจํ„ด์€ ์ฝœ๋ฐฑ ํ—ฌ๋กœ ์ธํ•ด ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๊ณ  ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋ฒˆ์— ํ•˜๊ธฐ๋„ ํž˜๋“ค๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ES6์—์„œ ๋„์ž…๋œ Promise๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋‹จ์ ๋“ค์„ ๋ณด์™„ํ•˜๋ฉฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ž€? ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์—ฌ ํ•ด๋‹น ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋„ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ๋กœ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ์—์„œ ์ฒ˜๋ฆฌ ๊ฒฐ๊ดด๋ฅผ ์™ธ๋ถ€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜..
[ JavaScript ] undefined์™€ null์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ '๋นˆ'๊ฐ’์„ ์˜๋ฏธํ•˜๋Š” ๋น„์Šทํ•œ ์›์‹œ ๊ฐ’์ด ์กด์žฌํ•˜๋Š”๋ฐ ๋ฐ”๋กœ null๊ณผ undefined ์ด๋‹ค. 1. undefined ES6๊ธฐ์ค€ 7๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ค‘ ํ•˜๋‚˜์ธ undefined๋Š” var ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์„ ์–ธ์„ ํ•˜๋ฉด ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด undefined๋กœ ์ดˆ๊ธฐํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํ• ๋‹น๋ฌธ ์ด์ „์— ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด undefined๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค. ( let ํ‚ค์›Œ๋“œ์™€ const ํ‚ค์›Œ๋“œ๋Š” undefined๋กœ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์Œ. ) var user; console.log(user); // undefined undefined์˜ ๊ฐ’์€ undefined๊ฐ€ ์œ ์ผํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ์ค€ ๋นˆ ๊ฐ’์ด ์•„๋‹ˆ๋ผ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ์˜ํ•ด undefined๋กœ ์ดˆ๊ธฐํ™”๋œ ๊ฐ’์ด๋‹ค. console๋กœ ์ฐ์—ˆ์„ ๋•Œ u..