๐ข ์ด๋ฒ ํญํด๋?
๊ธ์์ผ๋ถํฐ ์์ํ 6์ผ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ์ฃผ์ฐจ๊ฐ ๋ฑ 6์์ ๋์ด ๋ฌ๋ค.
2์ฃผ์ฐจ ํ์๋ถ๋ค๊ณผ ํ๋ก๊ทธ๋๋จธ์ค 1๋จ๊ณ 50๋ฌธ์ ๋ฅผ ํ์๋๋ฐ, ๋ฌ๋ฆฌ๊ธฐ๋ฐ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ณด๋ค 12๋ฌธ์ ๋ฅผ ๋ ํผ ์ ์ด๋ค.
์ฐ๋ฆฌ ํ์ ๋ ธ์ ์ ์ ๊ทน ํ์ฉํ๋ค. ๊ฐ์์ ํ์ด๋ ๊ณต์ ํ๊ณ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ธ๋ค์ด๋ ํ์ํ๋ ๊ฐ๋ ๋ค์ ๊ณ์ ๋ ธ์ ์ ์ถ๊ฐํด ๋๊ฐ๋ค. 6์ผ๋ง์ ์ ๋ฒ ์์ฌ์ ๋ณต์ตํ ๋ ํ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋จ ์๊ฐ์ด ๋ ๋ค.
๋ค๋ก ๊ฐ์๋ก 1๋จ๊ณ ๋ด์์๋ ๋ฌธ์ ๊ฐ ๊ธธ๊ณ ์กฐ๊ธ ์๊ฐ์ ํด์ผ ํ๋ (์ฃผ๋ก ์นด์นด์ค) ๋ฌธ์ ๋ค์ ์ ํ ์ ์์๋ค.
์๊ณ ๋ฆฌ์ฆ์ ์๋ฉด ์ฝ๊ฒ ํ๋ ธ๋ ๋น๋ฐ์ง๋ ๋ฌธ์ ๋, ์ ๊ทํํ์์ผ๋ก ๊น๋ํ๊ฒ ํผ ํ์ด๋ฅผ ๋ณด๊ณ ๋๋๋ ๋คํธ๊ฒ์ ๋ฌธ์ ๋ฑ์ด ๊ธฐ์ต์ ๋จ๋๋ค. ๋น ๋ฅธ ์์ผ ๋ด์ ์ง์คํด์ 1๋จ๊ณ ๋ฌธ์ ๋ค์ ๋๋ถ๋ถ ์ดํด๋ณผ ์ ์์ด์ ์๋ฏธ์๋ ์๊ฐ์ด์๋ค.
์ด์ 1๋จ๊ณ๋ ์ ์(?)ํ์ผ๋ ์ด์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์๋ฅผ ๊พธ์คํ ๋ฃ๊ณ 2๋จ๊ณ ๋ฌธ์ ํ์ด์ ์ง์คํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์ค๊ฐ์ค๊ฐ ์๊ณ ๋ฆฌ์ฆ ๋ชจ์๊ณ ์ฌ์ ํ ์คํธ๋ ์งํ๋์๋ค.
๊ฒ๋ํ์ด์์ ์ํ์ฅ์ผ๋ก ์ด๋ํด ์ฑ ์ ์์ ๋์ฌ์ง ์ค๋ธ์ ํธ๋ก ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํ์ธํ๊ณ ๋ฆฌํ๋ฆฟ(Repl.it)์ Node.js ํ๊ฒฝ์์ ํผ ๋ค์, ๊ฐ๋จํ ๋ฌธ์ ์์ฝ ๋ฐ ํ์ด ํด์ค ์์์ ์ฐ์ด ์ ํ๋ธ์ ์ ๋ก๋ํด์ ์ ์ถํ๋ ๋ฐฉ์์ผ๋ก ์งํ๋์๋ค.
1์ฃผ์ฐจ ๋ ํ๋ก์ ํธ ์์ฐ ์์ ๋๋ฌธ์ ์ ํ๋ธ์ ์ฒ์ ์ ๋ก๋ ํ์๋๋ฐ, ๋ช ๋ฒ ๋ฐ๋ณตํ๋ค๊ณ ์ด์ ์ข ๋ฅ์ํด์ก๋ค.
๊ทธ๋ฆฌ๊ณ ๊ตฌ๋ ์ ํ ๋ถ์ด ์๊ฒผ๋ค. ์์ง?
๐ ๋ฆฌ์กํธ ์ ๋ฌธ ์ฃผ์ฐจ ์์
7์์ 3์ฃผ ๋์ ์ฃผํน๊ธฐ ์ฃผ์ฐจ๊ฐ ์งํ๋๋ค. ์ด๋ ธ๋ฒ ์ด์ ์บ ํ์์๋ ๋ฆฌ์กํธ์ ์คํ๋ง ์ค ์ฃผํน๊ธฐ๋ฅผ ๊ณ ๋ฅผ ์ ์๋๋ฐ, ๋๋ ํ๋ก ํธ์๋ ์ง๋ง์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ๋ฅผ ์ ํํ๋ค. ์ด๋ฒ ์ฃผ๋ ์ ๋ฌธ ์ฃผ์ฐจ์ด๊ณ , ์๋ จ ์ฃผ์ฐจ์ ์ฌํ ์ฃผ์ฐจ๊ฐ ๋จ์์๋ค.
๋ฆฌ์กํธ ๊ธฐ์ด ๊ฐ์๋ฅผ ๋ฐ์์ 3์ฃผ์ฐจ ์ด๋ฐ๊น์ง ๋ค์๋๋ฐ, ํํฐ๋ ๊ฐ์๋ ฅ๋ ์ข์ผ์๊ณ ๋ฆฌ๋์ค์ ํ์ด์ด๋ฒ ์ด์ค๋ ๋ค๋ฃจ๊ณ ์์ด์ ๋น ๋ฅด๊ฒ ์๊ฐ ํ ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ ์ฑ 24์ฅ๋ถํฐ ์ค์ตํด๋ณด์๋ ๊ณํ์ ์ธ์ ๋ค.
์๊ณ ๋ฆฌ์ฆ ์ฃผ์ฐจ๊ฐ ๋๋๊ณ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฆฌ์กํธ๋ฅผ ๊ณต๋ถํ๊ธฐ ์์ํด์ ๊ทธ๋ฐ์ง ๋ ์ฌ๋ฐ๊ฒ ๋๊ปด์ง๋ค ๐ฅณ
๊ฐ์ธ ๊ณต๋ถ ์๊ฐ์ด ๋ง์ด ์ฃผ์ด์ง๋๊น ํ์ํ ๊ณต๋ถ๋ฅผ ํ ์๋ ์๊ณ , ์ค๊ฐ์ค๊ฐ ํ์๋ค๊ณผ ํ ์ํ ์ ์๋ ์ง์์๋ต ๊ณผ์ ๋ ๊ฐ์ธ ๊ตฌํ ๊ณผ์ ๋ ์ฃผ์ด์ ธ์ ์ด๋ฒ ์ฃผ์ฐจ๋ ์์ฐจ๊ฒ ๋ณด๋ผ ์ ์์ ๊ฒ ๊ฐ์ ๋๋์ด๋ค.
๐ JavaScript ๋ ํ๊ณ ๋ค๊ธฐ
๊ณ์ Deep Dive ์ฑ ๊ณผ ๋ชจ๋ JavaScript ํํ ๋ฆฌ์ผ์ ๊ธ๋ค์ ์ฝ์ผ๋ฉด์ ์์ง ์ดํด๊ฐ ํ์คํ์ง ์์ ๊ฐ๋ ๋ค์ ์ฑ์๋๊ฐ๊ณ ์๋ค. ์ ๋ฌธ ์ฃผ์ฐจ ์ง์ ๊ณผ ํจ๊ป Starting Assignment ๋ก ๋ฐ์ ์ฃผ์ ๋ค์ ๊ธ๋ก ์ ๋ฆฌํ๋ฉด์ ํนํ ์คํ ์ปจํ ์คํธ์ ํธ์ด์คํ ๊ฐ๋ ์ ๋ํด ๋ ์์ธํ ์ดํด๋ณผ ์ ์์๋ค.
์ค๋์ JavaScript์ ES๊ฐ ๋ฌด์์ธ์ง, ES5์ ES6์ ๋ฌธ๋ฒ ํน์ง์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
> ECMAScript์ JavaScript
ECMA(European Computer Manufacturers Association) International ์์ ๊ด๋ฆฌํ๋ ํ์ค์๋
[ECMA-262] ECMAScript (JavaScript)
[ECMA-402] ECMAScript 2020 Internalization API
[ECMA-404] JSON
[ECMA-408] Dart Programming Language
๋ฑ์ด ์๋ค.
์ด ์ค ECMAScript(ES)๋ JavaScript์ ํ์ค ์ฌ์์ธ ECMA-262๋ฅผ ๋งํ๋ค. ECMA ์ธํฐ๋ด์ ๋์ ์ฐํ ๊ธฐ์ ์์ํ(Technial Committee)๋ค ์ค TC39์์ JavaScript์ ๋ช ์ธ๋ฅผ ์ ์, ๊ด๋ฆฌ ๋ฐ ๋ ผ์ํ๊ณ ์๋ค. TC39์๋ Mozilla, Google, Apple, Microsoft ๋ฑ์ ๋ฉ์ด์ ๋ธ๋ผ์ฐ์ ๋ฒค๋๋ฅผ ๋น๋กฏํด Facebook, Twitter ๋ฑ ๋ค์ํ ๋จ์ฒด๋ค์ด ๊ตฌ์ฑ์์ผ๋ก ์ฐธ๊ฐ ์ค์ด๋ค. TC39์์ ๋ด๋ฆฌ๋ ๊ฒฐ์ ์ ๋จ์ ๋ค์๊ฒฐ์ด ์๋ ์ปจ์ผ์์ค ์ฒด์ ๋ก ์ด๋ฃจ์ด์ง๊ณ , ํ์๋ก์ ๋ชจ๋ ์น์์ ๊ณต๊ฐ๋์ด ์๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ, ํ์ , ๊ฐ์ฒด์ ํ๋กํผํฐ, ํจ์, ํ์ค ๋นํธ์ธ ๊ฐ์ฒด ๋ฑ ํต์ฌ ๋ฌธ๋ฒ์ ๊ท์ ํ๋ฉด ๊ฐ ๋ธ๋ผ์ฐ์ ์ ์กฐ์ฌ๋ ECMAScript ์ฌ์์ ์ค์ํด์ ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ตฌํํ๊ฒ ๋๋ค.
JavaScript๋ ์ธ์ด์ ๊ธฐ๋ณธ ๋ผ๋๋ฅผ ์ด๋ฃจ๋ ECMAScript์, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ณ๋๋ก ์ง์ํ๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ Web API๋ฅผ ์ ๋ถ ์์ฐ๋ฅด๋ ๊ฐ๋ ์ด๋ค. Web API์๋ DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web storage, Web Component, Web Worker ๋ฑ์ด ์๋ค. ECMAScript์๋ ๋ฌ๋ฆฌ W3C(World Wide Web Consortium)์์ ๋ณ๋์ ์ฌ์์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๋ค.
> ES5, ES6(2015)
1995๋ ๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์ ์ฆ์์ ์น ํ์ด์ง์ ๋ณด์กฐ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด Brendan Eich๊ฐ ๊ฐ๋ฐํ JavaScript๋ฅผ ๋์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ณ , ์ผ๋ง ์ง๋์ง ์์ ๋ง์ดํฌ๋ก์ํํธ์์ JavaScript์ ํ์ ๋ฒ์ ์ธ JScript๋ฅผ ์ถ์ํ๊ณ IE 3.0์ ํ์ฌํ๊ฒ ๋๋ค. ๊ฐ ํ์ฌ๋ ์์ฌ ๋ธ๋ผ์ฐ์ ์ ์ ์ ์จ์ ๋์ด๊ธฐ ์ํด ๊ธฐ๋ฅ๋ค์ ๊ฒฝ์์ ์ผ๋ก ์ถ๊ฐํ๊ณ , ์ด์ ๋ฐ๋ผ ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์๊ฐ ๋ฐ์ํ๊ธฐ ์์ํ๋ค.
1996๋ 11์, ๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์ ์ฆ์์ ECMA ์ธํฐ๋ด์ ๋์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์คํ๋ฅผ ์์ฒญํ๊ณ , 1997๋ 7์์ ์ดํ์ธ ES1 ์ฌ์์ด ์์ฑ๋์๋ค. ์ดํ 1999๋ ์ ์ ๊ท ํํ์๊ณผ try...catch ๋ฌธ์ ๋์ ํ ES3์ ๊ณต๊ฐํ๊ณ , 10๋ ๋ค 2009๋ ์๋ HTML5์ ํจ๊ป ES5๊ฐ ํ์ค ์ฌ์์ผ๋ก ์ถ์๋์๋ค.
ES5์์๋ JSON(XML์์ ๋ณํ), strict mode, ์ ๊ทผ์ ํ๋กํผํฐ ๋ฐ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ ์ ์ด(getter, setter)์ ๋ ํฅ์๋ ๋ฐฐ์ด ์กฐ์ ๊ธฐ๋ฅ๋ค(forEach, map, filter, reduce, some, every)์ด ์ถ๊ฐ๋์๋ค.
์ด๋๊น์ง ์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ช ํํ ๊ตฌ๋ถ๋์ง ์์๋ค. ์ผ๋ฐ ํจ์๋ก์จ ํธ์ถํ ์๋ ์๊ณ , new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ ์์ฑ์ ํจ์๋ก์จ ํธ์ถํ ์๋ ์์ผ๋ฉฐ, ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋์ด ๋ฉ์๋๋ก์จ ํธ์ถํ ์๋ ์์๋ค. ์ฆ ๋ชจ๋ ํจ์๊ฐ callable์ด๋ฉด์ constructor๋ผ๋ ๋ป์ธ๋ฐ, ์ด๋ป๊ฒ ๋ณด๋ฉด ํธ๋ฆฌํ ๊ฒ ๊ฐ์ง๋ง ์์ ์ฑ์ด ๋จ์ด์ง๊ณ ์ฑ๋ฅ ๋ฉด์์๋ ์ํด์๋ค.
2015๋ ์ ๊ณต๊ฐ๋ ES6(ECMAScript 2015)์์๋ ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์ ๊ฐ์ถฐ์ผ ํ ๊ธฐ๋ฅ๋ค์ ๋๊ฑฐ ๋์ ํ๋ ํฐ ๋ณํ๊ฐ ์์๋ค. ๊ทธ๋์ ๋ณดํต ES6 ์ด์ ๊ณผ ์ดํ๋ก ๊ธฐ์ค์ด ๋๋๊ฒ ๋๋ค.
์ฃผ์ ๋ณ๊ฒฝ์ ์ผ๋ก๋ let/const ํค์๋, ํ์ดํ ํจ์, ํด๋์ค, ๋ชจ๋ import/export, ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด, ๋์คํธ๋ญ์ฒ๋ง ํ ๋น, ์คํ๋ ๋ ๋ฌธ๋ฒ, rest ํ๋ผ๋ฏธํฐ, Symbol, Promise, Map/Set, ์ดํฐ๋ฌ๋ธ, for ... of, ์ ๋๋ ์ดํฐ, Proxy ๋ฑ์ด ์๋ค.
ES6์์๋ ํจ์๋ฅผ ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ์ธ ๊ฐ์ง ์ข ๋ฅ๋ก ๋ช ํํ ๊ตฌ๋ถํ๋ค.
ES6 ํจ์์ ๊ตฌ๋ถ | constructor | prototype | super | arguments |
์ผ๋ฐ ํจ์(Normal) | โญ | โญ | โ | โญ |
๋ฉ์๋(Method) | โ | โ | โญ | โญ |
ํ์ดํ ํจ์(Arrow) | โ | โ | โ | โ |
ํ์ดํ ํจ์์ ๋ํด์๋ ์ด์ ์ ์ ๋ฆฌํ ๊ธ์ด ์์ด ์๋์ ์ฒจ๋ถํด ๋ณธ๋ค.
2022.06.05 - [JavaScript] - [JavaScript] ํ์ดํ ํจ์์ this
Reference >
- https://ahnheejong.name/articles/ecmascript-tc39/
- ๋ชจ๋ JavaScript Deep Dive p.6-8, 13-14, 469-471
- https://developer.mozilla.org/ko/docs/Web/API