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)์ด๋ค. ๋น๋๊ธฐ๋ ํน์ ์์ ์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ ์ ๋์์ ์ํํ ์ ์๊ฒ ํ๋ค. ๋น๋๊ธฐ๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์์ ์ ๋ค๋ฅธ ๊ณณ์ ์ธ๊ฐํ์ฌ ์ฒ๋ฆฌ๋๊ฒ ํ๊ณ , ๊ทธ ์์ ์ด ์๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ์ ์คํํ๋ ๋ฐฉ์์ผ๋ก, ์ฝ๊ฒ ๋งํด ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด.. ์ด์ 1 ๋ค์