
๋ถํธ์บ ํ๋ฅผ ์๊ฐํ๋ ๊ฐ์ ํ์๋ค๋ผ๋ฆฌ ๋์ค์ ๋ฉด์ , ์์ ์ ๋ํ ๊น์ ์ดํด๋ฅผ ์ํด์ โ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Diveโ ๋ฅผ ํน์ ์ฅ๊น์ง ์ฝ๊ณ ์ค๋ช ํ๋ Study๋ฅผ ์งํํ๊ธฐ๋ก ํ์ต๋๋ค.
์์
์ ์งํํ๋ 7๊ฐ์ ๋จ์ง์ ์๊ฐ๋์ 1๋
ํ ์ ์๊ธฐ๋ฅผ...!
๊ทธ๋ฆฌ๊ณ ์ด ๋ด์ฉ์ด ํ๋ก๊ทธ๋๋ฐ์ ์์ํ๋ ์ ์๊ฐ์ ์ด๋ณด๋ค์๊ฒ๋ ๋์์ด ๋ ์ ์๋ ๊ธ์ด ๋ ์ ์๋๋ก ์ ๊ธฐ๋ก์ผ๋ก ๋จ๊ฒจ๋ณด๊ฒ ์ต๋๋ค.
์ค๋ ์ ๋ฆฌํด ๋ณผ ์ฅ์ 1-5์ฅ๊น์ง์ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
์ฃผ์ ๋ด์ฉ
1์ฅ ํ๋ก๊ทธ๋๋ฐ
2์ฅ ์๋ฐ์คํฌ๋ฆฝํธ๋?
3์ฅ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์คํ ๋ฐฉ๋ฒ
4์ฅ ๋ณ์
5์ฅ ํํ์๊ณผ ๋ฌธ
๊ธฐ๊ณ์ด๋ก ์ง์ ๋ช ๋ น์ ์ ๋ฌํ๋ ๊ฒ์ ๋ํ ๋์์ผ๋ก ์ฌ๋์ด ์ดํดํ ์ ์๋ ์ฝ์๋ ๊ตฌ๋ฌธ(๋ฌธ๋ฒ)์ผ๋ก ๊ตฌ์ฑ๋ "ํ๋ก๊ทธ๋๋ฐ ์ธ์ด"๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ์์ฑํ ํ, ๊ทธ์ ์ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ๋ก ๋ณํํ๋ ์ผ์ข ์ ๋ฒ์ญ๊ธฐ

console.log("Hello World")
์ฝ 90%์ ์์ฅ ์ ์ ์จ๋ก ์น ๋ธ๋ผ์ฐ์ ์์ฅ์ ์ง๋ฐฐํ๊ณ ์๋ ๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์ ์ฆ๋ ์นํ์ด์ง์ ๋ณด์กฐ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ๊ฒฝํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ณ , ๊ทธ๋์ ํ์ํ ๊ฒ์ด "๋ธ๋ ๋ ์์ดํฌ"๊ฐ ๊ฐ๋ฐํ "์๋ฐ์คํฌ๋ฆฝํธ"
1996๋
3์, "๋ชจ์นด Mocha"
๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์
์ฆ์ ์น ๋ธ๋ผ์ฐ์ ์ธ ๋ท ์ค์ผ์ดํ ๋ด๋น์ผ์ดํฐ2์ ํ์ฌ
1996๋
9์, "๋ผ์ด๋ธ์คํฌ๋ฆฝํธ"
1996๋
12์, "์๋ฐ์คํฌ๋ฆฝํธ"
1996๋
8์,
๋ง์ดํฌ๋ก์ํํธ(MS)๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ๋ฒ์ ์ธ "JScript"๋ฅผ ์ธํฐ๋ท ์ต์คํ๋ก์ด์ ํ์ฌ.
๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์ ์ฆ์ MS๋ ์์ฌ ๋ธ๋ผ์ฐ์ ์ ์์ฅ ์ ์ ์จ์ ๋์ด๊ธฐ ์ํด ์์ฌ ๋ธ๋ผ์ฐ์ ์์๋ง ๋์ํ๋ ๊ธฐ๋ฅ์ ๊ฒฝ์์ ์ผ๋ก ์ถ๊ฐํ์ฌ ํ์คํ๋ณด๋ค๋ ์ ๋นํ ํธํ์ฑ์ ๊ฐ์ถค
ํฌ๋ก์ค ๋ถ๋ผ์ฐ์ง ์ด์
๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ์นํ์ด์ง๊ฐ ์ ์์ ์ผ๋ก ๋์ํ์ง ์์.
1996๋
11์
๋ท์ค์ผ์ดํ ์ปค๋ฎค๋์ผ์ด์
์ฆ๋ ์ปดํจํฐ ์์คํ
์ ํ์ค์ ๊ด๋ฆฌํ๋ ๋น์๋ฆฌ ํ์คํ ๊ธฐ๊ตฌ์ธ ECMA ์ธํฐ๋ค์
๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์คํ ์์ฒญ
1997๋
7์ ECMAScript
ECMA-62๋ผ ๋ถ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํฌ๋ฐ ์ฌ์์ด ์์ฑ๋์์ผ๋, ์ํ๊ถ ์ด์๋ก ECMAScript๋ก ๋ช
๋ช
.
1999๋
ECMAScript3
์ ๊ท ํํ์, try... catch
2009๋
ECMAScript 5(EC5)์ HTML5 ๊ณต๊ฐ
JSON, stirt mode, ์ ๊ทผ์ ํ๋กํผํฐ, ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ ์ ์ด, ํฅ์๋ ๋ฐฐ์ด ์กฐ์ ๊ฐ๋ฅ(forEach, map, filtter, reduce, some, every)
2015๋
ECMAScript 6
let/const ํค์๋, ํ์ดํ ํจ์, ํด๋์ค, ๋ชจ๋ ๋ฑ๊ณผ ๊ฐ์ด ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฏธ๋ฐ ์ธ์ด๋ก์ ๊ฐ์ถฐ์ผ ํ ๊ธฐ๋ฅ๋ค์ ๋๊ฑฐ ๋์
ํ๋ ํฐ ๋ณํ๊ฐ ์๊ธฐ๊ณ , ์ดํ ๋ฒ์ ์ ๋น๊ต์ ์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ์์ค์ผ๋ก ๋งค๋
๊ณต๊ฐํ ๊ฒ ์๊ณ
์ด์ฐฝ๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์นํ์ด์ง์ ๋ณด์กฐ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ํ์ ์ ์ธ ์ฉ๋๋ก ํ์ฉ๋์๋๋ฐ ์ด์ ์๋ ์ด๋ค ๊ฒ์ด ์์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1999๋ , ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์๋ฒ์ ๋ธ๋ผ์ฐ๊ฐ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์๋ ํต์ ๊ธฐ๋ฅ์ผ๋ก ๋ฑ์ฅํฉ๋๋ค.
์ด์ ์ ์นํ์ด์ง๋ ํ๋ฉด์ด ์ ํ ๋ ๋๋ง๋ค ์๋ฒ๋ก ์๋ก์ด HTML์ ์ ์ก ๋ฐ์ ์นํ์ด์ง ์ ์ฒด๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ๋ ๋๋งํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ๋๋์ด์ ํ๋ฉด์ด ์๊ฐ์ ์ผ๋ก ๊น๋ฐ์ด๋ ํ์์ด ๋ฐ์ํ๊ณ , ๋ณ๊ฒฝํ ํ์ ์๋ ๋ถ๋ถ๋ ๋ ๋๋งํ์ฌ ๋ถํ์ํ ๋ฐ์ดํฐ ํต์ ๊ณผ ์ฑ๋ฅ๋ฉด์์๋ ๋ถ๋ฆฌํ์ต๋๋ค.
Ajax๋ ์๋ฒ๋ก๋ถํฐ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ์ก ๋ฐ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๋ฐฉ์์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. ๋น ๋ฅธ ์ฑ๋ฅ๊ณผ ๋ถ๋๋ฌ์ด ํ๋ฉด ์ ํ์ ์ ๊ณตํ์์ต๋๋ค.
2005๋ , ๊ตฌ๊ธ์ด ๋ฐํํ ๊ตฌ๊ธ ๋งต์ค๋ Ajax ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๋ํ์ ์ธ ์น ์ ํ๋ฆฌ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ๋ฅ์ฑ์ ํ์ธํ๋ ๊ณ๊ธฐ๋ฅผ ๋ง๋ จํ์์ต๋๋ค.
2006๋ , ๋ค์ ๋ฒ๊ฑฐ๋กญ๊ณ ๋ ผ๋์ด ์๋ DOM(Document Object Model)์ ๋์ฑ ์ฝ๊ฒ ์ ์ดํ๊ณ ,, ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ์ด์๋ ์ด๋ ์ ๋ ํด๊ฒฐํ์์ต๋๋ค. jQuery๋ ๋์ ์ฌ์ฉ์ ์ธต์ ์์๊ฐ์ ํ๋ณดํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ๋ณด๋ค ์ง๊ด์ ์ธ jQuery๋ฅผ ์ ํธํ๋ ๊ฐ๋ฐ์๊ฐ ์์ฑ๋๊ธฐ๋ ํ์ต๋๋ค.
2008๋
, ๊ตฌ๊ธ ๋งต์ค๋ฅผ ํตํด์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ๋ฅ์ฑ์ ํ์ธํ๊ณ , ๋์ฑ ๋น ๋ฅด๊ฒ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ง์ ํ์์ฑ์ด ๋๋๋ ๋ ์ด๋ฌํ ์๊ตฌ๋ฅผ ๋ง์กฑํ๋ ๋น ๋ฅธ ์ฑ์ ๋ณด์ฌ์ฃผ๋ ์์ง์ผ๋ก V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.
๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์ ์ฌํ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ์ ๊ณตํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ ์ฐฉํ๊ฒ ๋์์ต๋๋ค.
์ด ๋น์, ์น ์๋ฒ์์ ์ํ๋๋ ๋ก์ง์ด ๋๊ฑฐ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ก ์ด๋ํ๊ณ , ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ์์ญ์์ ํ๋ก ํธ์๋ ์์ญ์ด ์ฃผ๋ชฉ๋ฐ๋ ๊ณ๊ธฐ๋ก ์์ฉํ๊ฒ๋์์ต๋๋ค.
2009๋
, ๋ผ์ด์ธ ๋ฌ์ด ๋ฐํํ Node.js๋ ๊ตฌ๊ธ V8์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ผ๋ก ๋น๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ ์
๋๋ค.
๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์๋ง ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์ด์ธ์ ํ๊ฒฝ์์ ๋์ํ ์ ์๋๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ธ๋ผ์ฐ์ ์์ ๋
๋ฆฝ์ํค๋ ํ๊ฒฝ์
๋๋ค.
๋ค์ํ ํ๋ซํผ์ ์ ์ฉํ ์ ์์ง๋ง ์๋ฒ ์ฌ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ์ด์ ํ์ํ ๋ชจ๋, ํ์ผ ์์คํ
, HTTP๋ฑ ๋ด์ฅ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ์์ญ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๋ํ์ฑ์ ๋ณ๋์ ์ธ์ด๋ฅผ ํ์ตํ๊ธฐ ์ํ ์๊ฐ์ ๋ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
Node.js๋ ๋น๋๊ธฐI/O๋ฅผ ์ง์ํ๋ฉฐ ๋จ์ผ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ์ผ๋ก ๋์ํจ์ผ๋ก์จ ์์ฒญ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ์ข์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด I/O๊ฐ ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ Single Page Application ์ ์ ํฉํ๊ณ , CPU ์ฌ์ฉ๋ฅ ์ด ๋์ ์ ํ๋ฆฌ์ผ์ด์
์๋ ๊ถ์ฅํ์ง ์์ต๋๋ค.
๋ชจ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ๋น๊ตํด๋ ์์์ด ์๋ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ด ํ์๊ฐ ๋์๊ณ , ๋๋ถ์ด ๊ฐ๋ฐ ๊ท๋ชจ์ ๋ณต์ก๋๋ ์์น๋์์ต๋๋ค.
์ด์ ์ ๊ฐ๋ฐ ๋ฐฉ์์ผ๋ก๋ ๋ณต์กํด์ง ๊ฐ๋ฐ ๊ณผ์ ์ ์ํํ๊ธฐ ์ด๋ ค์์ก๊ณ , ์ด๋ฌํ ๋์ฆ์ ๋ฐ๋ผ์ ๋ง์ ํจํด๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถํํ์ต๋๋ค. ํ์ง๋ง, ๋ณ๊ฒฝ์ ์ ์ฐํ๋ฉด์ ํ์ฅํ๊ธฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์
์ํคํ
์ฒ์ ๊ตฌ์ถ์ ์ด๋ ต๊ฒ ํ๊ณ , ํ์ฐ์ ์ผ๋ก ํ๋ ์ธ์ํฌ๊ฐ ๋ฑ์ฅํ์์ต๋๋ค.
Component Based Delvelopment ๋ฐฉ๋ฒ๋ก ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ SPA์ ๋์คํ๊ฐ ์์๋๋ฉฐ, Angular, React, Vue.js, Sevlte๋ฑ ๋ค์ํ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ํ ๋ง์ ์ฌ์ฉ์ธต์ ํ๋ณดํ๊ณ ์์ต๋๋ค.
10+20
์์ ๊ฐ์ ์ฐ์ฐ์ด ์๋ค๊ณ ํ์ ๋, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ + ์ฐ์ฐ์ ์ํํ๊ธฐ ์ํด ๋จผ์ , ์ฐ์ฐ์์ ์ข๋ณ๊ณผ ์ฐ๋ณ์ ์ซ์ ๊ฐ(ํผ์ฐ์ฐ์)๋ฅผ ๊ธฐ์ตํฉ๋๋ค.
์ด ๋ ์ปดํจํฐ๋ CPU๋ฅผ ํตํด์ ์ฐ์ฐ, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ตํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ ์งํฉ์ฒด์ด๊ณ , ์ ํ๋์ ํฌ๊ธฐ๋ 1๋ฐ์ดํธ(8๋นํธ)์ด๋ฉฐ, ์ปดํจํฐ๋ ์ ์ ํฌ๊ธฐ ์ฆ 1 ๋ฐ์ดํธ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ฝ์ต๋๋ค.
๊ฐ ์ ์ ๊ณต์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋๋ฐ, ์ด ์ฃผ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์น๋ฅผ ๋ํ๋ด๋ฉฐ 0๋ถํฐ ์์ํด์ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋งํผ ์ ์๋ก ํํ๋ฉ๋๋ค.
ex. 4GB -> 0 ~ 4,294,967,295(0x00000000 ~ 0xFFFFFFFF)
์ปดํจํฐ๋ ๋ชจ๋ ๋ฐ์ดํฐ(์ข ๋ฅ ์๊ด ์์ด)๋ฅผ 2์ง์ ์ฒ๋ฆฌํ์ฌ, 2์ง์๋ก ์ ์ฅ๋ฉ๋๋ค.
"10 + 20" ์ ์ฐ์ฐ์ฐํด์ ๋ง๋ค์ด๋ธ 30์ ์ฌ์ฌ์ฉ ํ ์ ์์ต๋๋ค. ๊ณ์ ์ฌ์ฌ์ฉ์ ํ๊ฑฐ ์ถ๋ค๋ฉด ๊ฒฐ๊ณผ 30์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ง์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ ๋ฐ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ง์ ์ ๊ทธํ๋ ๋ฐฉ๋ฒ์ ์น๋ช ์ ์ธ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ ์ํํ ์ผ์ ๋๋ค. ์ค์๋ก ์ด์์ฒด์ ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์์คํ ์ ๋ฉ์ถ๊ฒ ํ๋ ์น๋ช ์ ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ฅผ ํ์ง ์์ต๋๋ค.
๋ง์ฝ ๊ฐ๋ฐ์์ ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ฅผ ํ์ฉํด๋ ๋ฌธ์ ๊ฐ ๋ ์ ์๋๋ฐ, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ์ฝ๋๊ฐ ์คํ๋ ๋ ๋ฉ๋ชจ๋ฆฌ ์ํฉ์ ๋ฐ๋ผ ์์๋ก ๊ฒฐ์ ๋์ด ๋์ผํ ์ปดํจํฐ, ๋์ผํ ๋ฉ๋ชจ๋ฆฌ์์ ์คํ์ ํด๋ ์ฝ๋๊ฐ ์คํ๋ ๋๋ง๋ค ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๋ณ๊ฒฝ๋ฉ๋๋ค.
์์ ๊ฐ์ ์ํฉ์์ "๋ณ์"๋ฅผ ํ์ฉํฉ๋๋ค.
: ํ๋๋ฆ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ํ๋ณดํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์ฒด ๋๋ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ณํ๊ธฐ ์ํด ๋ถ์ธ ์ด๋ฆ -> ๊ฐ์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ์์ง์ ์ธ ์ด๋ฆ
var result = 10+20;
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ฒ๋๋ฉด, 30์ด๋ผ๋ ๊ฐ์ result์ ์ ์ฅํ๋ ค ์ฌ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
result30๋ณ์ ํ ๋น์ ํตํด์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ ์ฅํ๊ณ , ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ฌ๋์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ๋ช ๋ช ํ ๋ณ์ ์ด๋ฆ์ ํตํด ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ์๋ฏธ๋ฅผ ์๊ณ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
์ด๋ค ๊ฐ์ ๊ตฌ๋ณํด์ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ์ด๋ฆ, ๋ณ์์ ๋ ๋ค๋ฅธ ์ด๋ฆ
๊ฐ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ธฐ์ตํ๊ณ ์์ด์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅ

๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์ด๋ฆ์ ๋ชจ๋ ์๋ณ์ -> ๋ฉ๋ชจ๋ฆฌ ์์ ์กด์ฌํ๋ ์ด๋ค ๊ฐ์ ์๋ณํ ์ ์๋ ์ด๋ฆ์ ๋ชจ๋ ์.๋ณ.์.
: ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ๋ณ์ ์ด๋ฆ๊ณผ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์๋ฅผ ์ฐ๊ฒฐํด์ ๊ฐ์ ์ ์ฅํ ์ ์๊ฒ ์ค๋นํ๋ ๊ฒ -> ๋ณ์ ์์ฑํ๋๊ฒ
1๏ธโฃ var ํค์๋ ์ ์ธ
var score
ํค์๋ : ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํค์๋๋ฅผ ๋ง๋๋ฉด ์์ ์ด ์ํํด์ผํ ์ฝ์๋ ๋์์ ์ํ
2๏ธโฃ ๋ณ์ ์ด๋ฆ์ ๋ฑ๋กํ๊ณ ๊ฐ์ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ๋ณด
undefined ์ด ์๋ฌต์ ์ผ๋ก ํ ๋น๋์ด ์ด๊ธฐํReferenceError(์ฐธ์กฐ ์๋ฌ) ๋ฐ์
undefined: ์์ ํ์ ์ ๊ฐ
์คํ ์ปจํ ์คํธ : ๋ณ์ ์ด๋ฆ์ ๋น๋กฏํ ๋ชจ๋ ์๋ณ์๊ฐ ๋ฑ๋ก๋๋ ๊ณณ. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์์ค์ฝ๋๋ฅผ ํ๊ฐํ๊ณ ์คํํ๊ธฐ ์ํด ํ์ํ ํ์ฉ์ ์ ๊ณตํ๊ณ ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ค์ ๋ก ๊ด๋ฆฌํ๋ ์์ญ. key, velue์ ํ์์ธ ๊ฐ์ฒด๋ก ๋ฑ๋ก๋์ด ๊ด๋ฆฌ
3๏ธโฃ ๋ณ์ ์คํ๊ณผ ํธ์ด์คํ
console.log(score);
var score;
์์ ๊ฐ์ด ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ์ฝ๋๊ฐ ๋จผ์ ์ค๊ณ , ๋ณ์๊ฐ ๋์ค์ ์ ์ธ๋๋ฉด ์ ์ธ๋์ง ์๋ ๋ณ์๋ก ์ธํด "์ฐธ์กฐ์๋ฌ"๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด ์๋๋ผ undefined ๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค.
๋ณ์ ์ ์ธ์ด ์์ค์ฝ๋๊ฐ ํ ์ค์ฉ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ ๋ฐํ์์ด ์๋๋ผ ๊ทธ ์ด์ ๋จ๊ณ์์ ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋์ ๊ฐ์ด ์คํ๋ฉ๋๋ค.
ํธ์ด์คํ Variable Hoisting
: ๋ณ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ ์ ํน์ง
var score; // ๋ณ์ ์ ์ธ
score = 80; // ๋ณ์ ํ ๋น
var score = 80; // ๋ณ์ ์ ์ธ + ํ ๋น
์์ ์ฝ๋๋ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ณ์ ์ ์ธ๊ณผ ๊ฐ์ ํ๋น์ 2๊ฐ์ ๋ฌธ์ผ๋ก ๋๋์ด ๊ฐ๊ฐ ์คํํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๋ ์ฃผ์ํ ์ ์ ๋ณ์ ์ ์ธ๊ณผ ๊ฐ์ ํ ๋น์ ์คํ ์์ ์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋๋ค.
console.log(score); // undefined
var score = 80;
console.log(score); // 80
var score = 80;
score = 90;
์์ ๊ฐ์ด ๋์์ ธ์์ผ๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ 80 ๋ฐ์ ๊ฐ์ ์ด๊ธฐํํ์ฌ undefined๋ก ํ ๋ค์, 90์ด๋ผ๋ ๊ฐ์ ๋ฐ๋๋ค.
์์ : ์์ ๊ฐ์ด ์ฌํ ๋น์ ๋ฐ์์ ๋, ๋ณ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ ์ง์นญ
const : ์ฌํ ๋น์ด ๊ธ์ง๋์ด ๋ณ์๋ฅผ ์์๋ก ํํ ๊ฐ๋ฅ -> ๋ฐ๋์ ์์๋ง์ ์ํด ์ฌ์ฉํ์ง ์์
90์ด๋ผ๋ ๊ฐ์ ๋ฐ์์ ๋, 90 ์ด์ ์ ๊ฐ์ธ undefined, 80์ ์ด๋ค ๋ณ์๋ ๊ฐ์ผ๋ก ๊ฐ๊ณ ์์ง ์์ ์๋ณ์์ ์ฐ๊ฒฐ์ด ์๋์ด์์ต๋๋ค. ์ด๋ฌํ ๋ถํ์ํ ๊ฐ๋ค์ ๊ฐ๋น์ง ์ฝ๋ ์ ์ํด ๋ฉ๋ชจ๋ฆฌ์์ ์๋ ํด์ ๋์ง๋ง, ์ธ์ ํด์ ๋ ์ง ์์ธกํ ์ ์์ต๋๋ค.
๊ฐ๋น์ง ์ฝ๋ ํฐ(garbage collector) : ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํ์ฌ ๋์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๊ธฐ๋ฅ. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์ง
์ธ๋งค๋์ง๋ ์ธ์ด์ ๋งค๋์ง๋ ์ธ์ด
: ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๊ณผ ํด์ ๋ฅผ ๋ด๋นํ๋ ๊ฐ๋น์ง ์ฝ๋ ํฐ๊ฐ ์๋ ์ธ์ด๋ฅผ ๋งค๋์ง๋ ์ธ์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๊ฐ๋ฐ์์ ์ญ๋์ ์์กดํ๋ ๋ถ๋ถ์ด ์ ์ด์ ธ ์ด๋ ์ ๋ ์ผ์ ํ ์์ฐ์ฑ์ ํ๋ณดํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง ์ฑ๋ฅ๋ฉด์์ ์์ค์ ๊ฐ์ ํ ์ ๋ฐ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
C์ธ์ด์ ๊ฒฝ์ฐ,malloc(),free()๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธ๋งค๋์ง๋ ์ธ์ด์ ๊ฒฝ์ฐ ๊ฐ๋ฐ์์ ์ญ๋์ ๋ฐ๋ผ์ ์ต์ ์ ์ฑ๋ฅ์ ํ๋ณดํ ์ ์์ง๋ง, ์น๋ช ์ ์ธ ์ค๋ฅ๋ฅผ ์์ฐํ ๊ฐ๋ฅ์ฑ๋ ์์ต๋๋ค.
var firstname
var fristName
var FRISTNAME
[4๊ฐ์ง ์ ํ์ ๋ค์ด๋ฐ ์ปจ๋ฒค์
]
// ์นด๋ฉ ์ผ์ด์ค (์ผ๋ฐ์ ์ธ ๋ณ์๋ ํจ์์ ์ด๋ฆ)
var firstName;
// ์ค๋ค์ดํฌ์ผ์ด์ค
var first_name
// ํ์ค์นผ ์ผ์ด์ค (์์ฑ์ ํจ์, ํด๋์ค ์ด๋ฆ)
var FirstName
// ํ๊ฐ๋ฆฌ์ธ ์ผ์ด์ค
var strFistName; // type + identifier
var $elem = document.getElementById('myId'); // DOM ๋
ธ๋
var observable$ = fromEvent(document, 'click'); // RxJS ์ต์ ๋ฒ๋ธ
: ์(ํํ์)์ด ํ๊ฐ๋์ด ์์ฑ๋ ๊ฒฐ๊ณผ
var sum = 10+20 // ๊ฐ: 30
๋ณ์๋ ํ๋์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ํ๋ณดํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ณํ๊ฒ ๋ถ์ธ ์ด๋ฆ์ด๊ณ , ๋ณ์์ ํ ๋๋ ๊ฒ์ ๊ฐ์ ๋๋ค. ์์ ์ฝ๋์ sum ๋ณ์์ ํ ๋น๋๋ ๊ฒ์ "10+20"์ด ์๋๋ผ "30"์ ๋๋ค.
3 // ์ซ์ ๋ฆฌํฐ๋ "3"
: ๊ฐ์ผ๋ก ํ๊ฐ๋ ์ ์๋ ๋ฌธ.
ํํ์์ด ํ๊ฐ๋๋ฉด ์๋ก์ด ๊ฐ์ ์์ฑํ๊ฑฐ๋ ๊ธฐ์กด ๊ฐ์ ์ฐธ์กฐ(๋ฆฌํฐ๋๋ ํํ์)
// ๋ฆฌํฐ๋ ํํ์
10
'Hello'
// ์๋ณ์ ํํ์(์ ์ธ์ด ์ด๋ฏธ ์กด์ฌํ๋ค๊ณ ๊ฐ์ )
sum
person.name
arr[1]
// ์ฐ์ฐ์ ํํ์
10 + 20
sum = 20
sum != 10
// ํจ์/๋ฉ์๋ ํธ์ถ ํํ์(์ ์ธ์ด ์ด๋ฏธ ์กด์ฌํ๋ค๊ณ ๊ฐ์ )
square()
person.getName()
๋์น : ํํ์๊ณผ ํํ์์ด ํ๊ฐ๋ ๊ฐ์ ๋๋ฑํ ๊ด๊ณ
1+2 =3์์1+2์3์ ๋์น
: ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ๋จ์์ด์ ์ต์ ์คํ ๋จ์ (ํ ํฐ์ผ๋ก ๊ตฌ์ฑ)
ํ ํฐ(token): ๋ฌธ๋ฒ์ ์ธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ฌธ๋ฒ์ ์ผ๋ก ๋ ์ด์ ๋๋ ์ ์๋ ์ฝ๋์ ๊ธฐ๋ณธ ์์

// ํํ์์ด ์๋ ๋ฌธ
var num = 100;
// ํํ์์ธ ๋ฌธ
100 + num // 110
//ํ ๋น๋ฌธ
num = 100; //100