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

Javascript

(4)
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ES6 ~ES2014 ECMAScript(ECMA-262) ๋Š” Javascript ๋ช…์„ธ ๋˜๋Š” ์ŠคํŽ™์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ECMA-262 : ECMA์ธํ„ฐ๋‚ด์…”๋„(ํ‘œ์ค€๊ธฐ๊ตฌ)์€ ECMAScript ์–ธ์–ด์˜ ๊ณต์‹ ์‚ฌ์–‘์ธ ECMA-262 ํ‘œ์ค€์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ECMAScript๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€์ด๋ฉฐ ๋ผˆ๋Œ€(core)๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ECMAScript ๋ช…์„ธ ๋˜๋Š” ์ŠคํŽ™์„ ๋”ฐ๋ฅด๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ECMAScript 6 (2015) ES6์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. - arrows (ํ™”์‚ดํ‘œ ํ•จ์ˆ˜) - classes (ํด๋ž˜์Šค) - enhanced object literals (object ๋ฉ”์†Œ๋“œ ์„ ์–ธ ๋ฐ ์†์„ฑ(๋™์ ) ์„ ์–ธ) - template strings (ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด)..
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Promise์™€ await/async Promise ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Promise ๊ฐ์ฒด๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์ตœ์ข… ์™„๋ฃŒ ๋˜๋Š” ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋…์ž์ ์ธ ๊ฐ์ฒด์ด๋‹ค. ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๊ฒ ๋‹ค๋Š” '์•ฝ์†'์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ Promise๋ผ ๋ช…๋ช… ์ง€์–ด์กŒ๋‹ค๊ณ  ํ•œ๋‹ค. Promise ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด new ํ‚ค์›Œ๋“œ์™€ Promise ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด๋•Œ Promise ์ƒ์„ฑ์ž ์•ˆ์— ๋‘๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋„ฃ๊ฒŒ ๋˜๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์ž‘์—…์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ์„ฑ๊ณต(resolve)์ž„์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฐ์ฒด์ด๋ฉฐ, ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋Š” ์ž‘์—…์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ์‹คํŒจ(reject)์ž„์„ ์•Œ๋ ค์ฃผ๋Š” ์˜ค๋ฅ˜ ๊ฐ์ฒด์ด๋‹ค. const myPromise = new Promise((resolve, reject) => { // ๋น„๋™๊ธฐ ์ž‘์—…..
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ˜ธ์ถœ ์Šคํƒ๊ณผ ์ด๋ฒคํŠธ ๋ฃจํ”„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ Call stack๊ณผ Event loop๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ผญ ์ˆ™์ง€ํ•ด์•ผํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ์˜๋ฏธํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ํฌ๊ฒŒ Memory heap, call stack, web apis, callback queue, event loop๊ฐ€ ์žˆ๋‹ค. Call Stack ํ˜ธ์ถœ ์Šคํƒ์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ ์Šคํƒ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๋กํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ˆœ์„œ๋Œ€๋กœ ์Šคํƒ์— ๋‹ด๊ณ , ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ์ž‘์—…์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” LIFO(Last In First Out) ๊ตฌ์กฐ์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ํ˜ธ์ถœ ์Šคํƒ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ task๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ..
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋น„๋™๊ธฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด์•ผ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋“œ ์ˆœ์ฐจ ์‹คํ–‰์„ ๋™๊ธฐ(Synchronous)๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์—…์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ์‘๋‹ต์ด ๋Šฆ์–ด์ง€๋Š” ๊ฒฝ์šฐ์— ์ „์ฒด์ ์ธ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ž‘์—…์ด ์žˆ๋‹ค๋ฉด, ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๊ฐœ๋…์ด ๋น„๋™๊ธฐ(Asynchronous)์ด๋‹ค. ๋น„๋™๊ธฐ๋Š” ํŠน์ • ์ž‘์—…์˜ ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋น„๋™๊ธฐ๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ๋‹ค๋ฅธ ๊ณณ์— ์ธ๊ฐ€ํ•˜์—ฌ ์ฒ˜๋ฆฌ๋˜๊ฒŒ ํ•˜๊ณ , ๊ทธ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์‰ฝ๊ฒŒ ๋งํ•ด ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด..