ECMAScript์ JavaScript ํ์คํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ํ์คํ๋๊ณ ์์๊น?
๐ง ECMAScript๋ ๋ฌด์์ธ๊ฐ?
ECMAScript๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค ๋ช
์ธ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ธ๋ผ์ฐ์ ์์ ์ฒ์ ๋ง๋ค์ด์ก์ง๋ง, ๊ฐ ๋ธ๋ผ์ฐ์ ๋ง๋ค ๊ตฌํ ๋ฐฉ์์ด ์กฐ๊ธ์ฉ ๋ฌ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํต์ผํ ํ์๊ฐ ์์๋ค.
๊ทธ๋์ ์ธ์ด์ ๊ธฐ๋ฐ์ด ๋๋ ๋ช
์ธ๋ฅผ ๋ง๋ค์๊ณ , ์ด๊ฒ ๋ฐ๋ก ECMAScript๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ = ECMAScript๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ธ์ด ๊ตฌํ์ฒด๋ค.
- ECMAScript๋ ๋ฌธ๋ฒ, ํ์ , ํค์๋, ์ฐ์ฐ์, ๋ด์ฅ ๊ฐ์ฒด ๋ฑ ํต์ฌ ๊ท์น์ ์ ์ํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์๋ ActionScript(ํ๋์์์ ์ฐ๋ ์ธ์ด)๋ ECMAScript๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๋ค.
๐ ๋๊ฐ ํ์ค์ ์ ํ๋๊ฐ?
ํ์ค์ TC39(Technical Committee 39)๋ผ๋ ์์ํ๊ฐ ๋ง๋ ๋ค.
์ด ์์ํ๋ ECMA ์ธํฐ๋ด์
๋์ด๋ผ๋ ํ์คํ ๊ธฐ๊ตฌ ์ฐํ์ ์๊ณ ,
๊ตฌ์ฑ์์ ๊ตฌ๊ธ, ๋ง์ดํฌ๋ก์ํํธ, ์ ํ, ๋ชจ์ง๋ผ ๊ฐ์ ํ์ฌ๋ค์ด๋ค.
TC39๋ ๋งค๋
๋ช ์ฐจ๋ก ํ์๋ฅผ ์ด๊ณ , ์๋ก์ด ์ ์๋ค์ ๊ฒํ ํ๊ฑฐ๋ ๊ธฐ์กด ๋ช
์ธ๋ฅผ ๊ฐ์ ํ๋ค.
์ ์์ ๋๊ตฌ๋ ๋ผ ์ ์์ง๋ง, ํ์ค์ด ๋๋ ค๋ฉด 5๋จ๊ณ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
๐ฆ TC39 ํ๋ก์ธ์ค๋ ์ด๋ป๊ฒ ๋๋?
ํ์ค์ด ๋๊ธฐ๊น์ง๋ ์๋์ ๋จ๊ณ๋ฅผ ๋ฐ๋๋ค.
๋จ๊ณ ์ค๋ช
| Stage 0 | ์์ด๋์ด ์ ์. ์์ง ๊ทธ๋ฅ ์๊ฐ ์์ค์ด๋ค. |
| Stage 1 | ์ ์์ ์์ฑ. ์ด๋ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง, ์์ด๋์ด์ ๋ฐฉํฅ์ฑ์ด ์ค๋ช ๋๋ค. |
| Stage 2 | ๋ช ์ธ ์ด์. ๋ฌธ๋ฒ์ด๋ ๋์์ด ๊ตฌ์ฒด์ ์ผ๋ก ์ ์๋๋ค. |
| Stage 3 | ์ต์ข ๊ฒํ . ๊ตฌํ์ฒด๊ฐ 2๊ฐ ์ด์ ๋์์ผ ํ๊ณ , ๋ช ์ธ๊ฐ ๊ฑฐ์ ํ์ ๋๋ค. |
| Stage 4 | ํ์ค ์ฑํ. ECMAScript์ ๊ณต์์ ์ผ๋ก ํฌํจ๋๋ค. |
์๋ฅผ ๋ค์ด optional chaining (?.) ๊ฐ์ ๋ฌธ๋ฒ๋ Stage 0๋ถํฐ ์์ํด์ Stage 4๊น์ง ์ฌ๋ผ๊ฐ ๋ค ์ ์ ์ฑํ๋ ๊ธฐ๋ฅ์ด๋ค.
๐ฆ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ป๊ฒ ๋ฐ๋๋?
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋งค๋
ํ ๋ฒ์ฉ ECMAScript ๋ช
์ธ๊ฐ ์๋ก ๋ฐํ๋๋ค.
๋ณดํต "ES2020", "ES2021"์ฒ๋ผ ์ฐ๋๋ก ๋ฒ์ ์ด ๋ถ๋๋ค.
๊ฐ ๋ฒ์ ์๋ ๋ค์ ๊ฐ์ ๋ณํ๊ฐ ๋ด๊ธด๋ค:
- ์๋ก์ด ๋ฌธ๋ฒ ์ถ๊ฐ (์: ??, ?.)
- ํ์ค ๋ด์ฅ ๊ฐ์ฒด ๊ฐ์ (์: Array.prototype.at())
- ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฐ์ (์: top-level await)
๐ก ์ฐธ๊ณ ๋ก ์๋ ์๋ "ES6", "ES7"์ฒ๋ผ ์ซ์ ๋ฒ์ ์ผ๋ก ๋ถ๋ ์ง๋ง, ES6 ์ดํ๋ถํฐ๋ ์ฐ๋ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ๋์๋ค.
๐งช ๋๊ฐ ์ด๋ป๊ฒ ๊ตฌํํ๋?
ECMAScript ๋ช ์ธ๋ฅผ ์ง์ ์คํํด์ฃผ๋ ๊ฑด ๊ฐ JS ์์ง์ ์ญํ ์ด๋ค.
- V8 (ํฌ๋กฌ, Node.js)
- SpiderMonkey (ํ์ด์ดํญ์ค)
- JavaScriptCore (์ฌํ๋ฆฌ)
- Chakra (์๋ Edge)
์ด ์์ง๋ค์ด TC39์ ๋ช
์ธ๋ฅผ ๋ณด๊ณ ์ง์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
๊ฐ ์์ง์ Stage 3๋ Stage 4 ๊ธฐ๋ฅ๋ถํฐ ์ ์ง์ ์ผ๋ก ๋์
ํ๋ค.
๐งพ ์ ์ด๊ฑธ ์์์ผ ํ์ง?
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊น์ด ์๊ฒ ์ดํดํ๊ณ ์ถ๋ค๋ฉด,
์ด ์ธ์ด๊ฐ ์ด๋ป๊ฒ ํ์คํ๋๊ณ ๋ฐ์ ํ๋์ง ๊ตฌ์กฐ๋ฅผ ์๋ ๊ฒ ์ค์ํ๋ค.
- ์ง๊ธ ์ฐ๋ ๋ฌธ๋ฒ์ด ์ ์ด๋ ๊ฒ ์๊ฒผ๋์ง ์ดํดํ ์ ์๋ค.
- ์์ง ํ์ค์ด ์๋ ์คํ์ ๊ธฐ๋ฅ๋ ํ ์คํธํด๋ณผ ์ ์๋ค.
- ์ต์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ ๋ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์์ธกํ ์ ์๋ค.
์ฒ์์ ECMAScript๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ญ๊ฐ ๋ค๋ฅธ ๊ฑด์ง ๋ชฐ๋๋ค. ๊ทธ๋ฅ ์๋ก์ด ๋ฌธ๋ฒ์ด ์๊ธฐ๋ฉด ํ๋ ์์ํฌ๊ฐ ์
๋ฐ์ดํธ๋ ์ค ์์๋ค.
๊ทธ๋ฐ๋ฐ ์๊ณ ๋ณด๋, ์ง์ง ๋ฐ๋ฐ๋ฅ์๋ ๋ช
์ธ๋ฅผ ๋ง๋๋ ์ฌ๋๋ค์ด ์๊ณ , ๊ทธ๊ฑธ ํด์ํด์ ๋ธ๋ผ์ฐ์ ๋ Node.js ๊ฐ์ ์ ๋ค์ด ๊ตฌํํ๊ณ ์์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ทธ๋ฅ ๋๋ ๊ฒ ์๋๋ผ, ๋๊ตฐ๊ฐ ๋จธ๋ฆฌ ์ธ๋งค์ ์ค๊ณํ๊ณ , ๋ค์์ ๊ธฐ์
๊ณผ ๊ฐ๋ฐ์๋ค์ด ๊ทธ๊ฑธ ํฉ์ํด์ ๋ง๋ค์ด๊ฐ๋ ๊ตฌ์กฐ๋ผ๋ ๊ฑธ ์ดํดํ๋๊น ์ด ์ธ์ด๊ฐ ๋ ํฅ๋ฏธ๋กญ๊ฒ ๋๊ปด์ง๋ ๊ฒ ๊ฐ๋ค...
๐ ์ฐธ๊ณ ๋งํฌ
- ECMAScript ๊ณต์ ๋ช ์ธ (ECMA-262)
- TC39 GitHub
- JavaScript ์ต์ ์ ์ ์ดํด๋ณด๊ธฐ (tc39 proposals)