
JavaScript์ ๋ณ์์ ๋ํด ์์๋ณด์.
๋ณ์ ์ด๋ฆ ๊ท์น์ด๋ ์ ์ธ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ํธ์ด์คํ
์ ๋ํด ์ ๋ฆฌํด ๋ณผ ๊ฒ์ด๋ค.
์ฐ์ ๋ณ์์ ์ ์๋ถํฐ ์์๋ณด์.
๋ณ์๋, ํ๋์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด์ ํ๋ณดํด๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ถ์ธ ์ด๋ฆ ์ด๋ค.
์๋ฌด๋ฆฌ ๋ณต์กํ ํ๋ก๊ทธ๋จ์ด๋ผ๋ ๊ฒฐ๊ตญ์ '๋ฐ์ดํฐ ์
๋ ฅ - ์ฒ๋ฆฌ - ์ถ๋ ฅ' ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋ง๋ จ์ด๊ณ , ๊ทธ ๊ณผ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ด๋ฆ์ ๋ถ์ด๋ ๊ณผ์ ์ ํ์ฐ์ ์ผ๋ก ๊ฑฐ์น๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ด๋ฆ์ ๋ถ์ด์ผ ํ๋๊ฑธ๊น?
๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ด๋ฆ์ ๋ถ์ด์ง ์์ผ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ์์๋ณด์.
10 + 20
์ ์์์ด ์ด๋ค ๊ณผ์ ์ ํตํด ์ฐ์ฐ๋๋๊ฐ?
ํผ์ฐ์ฐ์๋ฅผ ๊ธฐ์ต(์ ์ฅ)ํ๊ณ , ๊ธฐํธ์ ์์ ํด์ํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.
์ฐ๋ฆฌ๊ฐ ํด๋น ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด, ์ด๋ป๊ฒ ํด์ผํ ๊น?
(์ฐ๋ฆฌ๋ JavaScript๋ฅผ ๊ณ์ฐ๊ธฐ๋ก๋ง ์ฌ์ฉํ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์, ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋์ ์๊ณ ์์ด์ผํ๋ค.)
๊ฒฐ๊ณผ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด์๊ณ , ๊ฒฐ๊ณผ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ง๋ ํ ๋ฐฉ๋ฒ์ด ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋จ์ ๋ฐฉ๋ฒ์ด.. ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํด์ผ๋ง ํ๋ค.
๊ทธ๋ฌ๋..!!! ์ด๊ฑด ๊ต์ฅํ ์ํจํ ํ๋จ์ด๋ค.
ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ์ด๋ฐ ์ํฉ์์๋, ์น๋ช
์ ์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒ๋ค๊ฐ JavaScript์์๋, ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๊ฒ์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด๊ธฐ๋ ํ๋ค.
๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ์ํฉ์ ํผํ ์ ์๋ค.
let result = 10 + 20;
result๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ํ ๋น(๋์ .์ ์ฅ)ํ๋ค.
์ด ๋ let์ ๋ณ์ ์ ์ธ ํค์๋, result๋ ๋ณ์ ์ด๋ฆ์ด๋ค.
๋ณ์ ์ด๋ฆ์ ์๋ณ์๋ผ๊ณ ํ๋ค.
์ด๋ฐ ์ํฉ์์ ์๋ณ์, ์ฆ ๋ณ์๋ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ์ธ 30์ ๊ธฐ์ตํ๊ณ ์๋ ๊ฒ ๊ฐ์ ๋ณด์ธ๋ค.
ํ์ง๋ง ์ค์ ๋ก๋ ๊ฐ์ธ 30์ด ์๋๋ผ, ๊ทธ 30์ ๋ฉ๋ชจ๋ฆฌ์ ๋ช ๋ฒ์ง์ ์ ์ฅํด ๋๋์ง, ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๊ธฐ์ตํ๊ณ ์๋ค.
์ฐธ๊ณ ๋ก JavaScript์์ ๋ณ์์ ์ด๋ฆ์ ๋ถ์ผ ๋๋, camelCase๋ฅผ ์ฌ์ฉํ๋ค.
JavaScript์์ ๋ณ์์ ํจ์ ์ด๋ฆ์๋ camelCase ๋ฐฉ์์,
๊ทธ๋ฆฌ๊ณ ๋์ค์ ๋ค๋ฃฐ ์์ฑ์ ํจ์์ ํด๋์ค ์ด๋ฆ์๋ PascalCase ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๋ค.
JavaScript๋ C์ธ์ด์ ๋ค๋ฅด๊ฒ, ์ ์ธ์ ์๋ฃํ์ ๋ช
์ํ ํ์๊ฐ ์๋ค. ๐ฒ
๋ณ์ ์ ์ธ์ var, let, const ํค์๋๋ฅผ ์ฌ์ฉํ๊ณ , ๋ณ์์ ํ ๋น๋ ๊ฐ์ ๋ฐ๋ผ ์๋ฃํ์ด ์๋์ผ๋ก ๊ฒฐ์ ๋๋ค.
(๐ฒ.. C ์ธ์ด๋ง ์ฌ์ฉํ๋ ๋์๊ฒ๋,,,,, ์ถฉ๊ฒฉ์ ์ธ ์ฌ์ค์ด๋ค.....)
์๋ JS์๋ let์ด๋ผ๋ ํค์๋๊ฐ ์์๋ค๊ณ ํ๋ค.
๋ณ์๋ var, ์์๋ const๋ก ์ ์ธ์ ํ๋ ์์ด์๋ค.
๊ทธ๋ฐ๋ฐ var๋ก ๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ, block level scope๊ฐ ์๋ function level scope๋ฅผ ๊ฐ์ง๊ธฐ๋๋ฌธ์, ์๋์น ์๊ฒ ์ ์ญ๋ณ์๊ฐ ์ ์ธ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๊ทธ๋์ ES6์์๋, ์ด๋ฐ ๋ฌธ์ ์ ์ ๋ฐ์์ํค์ง ์๋ let ํค์๋๋ฅผ ๋์ ํ๋ค.
let score;
let ํค์๋๋ก score๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ๊ฐ ํ ๋น์ ํ์ง ์์๋ค.
C์ธ์ด์์๋, ๋ณ์๋ฅผ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํ์ง ์์ผ๋ฉด ์ฐ๋ ๊ธฐ๊ฐ์ด ์ ์ฅ๋๋ค.
๊ทธ๋ฌ๋ JS์์๋, ์ ์ธ ํ ์ด๊ธฐํ๋ฅผ ํ์ง ์์๋, ์๋ฌต์ ์ผ๋ก undefined๋ผ๋ ๊ฐ์ด ํ ๋น๋์ด ์ด๊ธฐํ๋๋ค.
(๐ฒ.. ์ถฉ๊ฒฉ์ ์ธ ์ฌ์ค 2)
์ด๊ฑด JS์ ๋
ํนํ ํน์ง์ด์ ์ฅ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค.
console.log(score); // ๋ณ์ score ์ฐธ์กฐ -> ์ถ๋ ฅ
let score; // ๋ณ์ ์ ์ธ
ํ ,, ์ด ์ฝ๋๋ ๋ณ์ ์ ์ธ ์ ์ ๋ณ์๊ฐ ์ฐธ์กฐ๋์์ผ๋, ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฌ๋ ๋๋๊ฒ๋! ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ,,, ์ฌ์ง์ด undefined ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
๊ทธ ๋ง์ score๊ฐ ์ ์ธ๋์๋ค๋ ๋ป์ด๋ค!!
Javascript๋ ํ์คํ์ค ์ฐจ๋ก๋ก ์ฝ์ด๊ฐ๋ฉฐ ์คํ๋๋ค๊ณ ํ๋๋ฐ,, ์ด๊ฒ ๋ฌด์จ์ผ์ผ๊น..?
์ด์ ๋ ์ด๋ฌํ๋ค.
JavaScript์ ์ฝ๋๊ฐ, ๋ฐํ์์ ํ์ค ํ์ค ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค๋ ๊ฑด ํ๋ฆฐ ๋ง์ด ์๋๋ค.
๊ทธ๋ฌ๋ ๋ณ์ ์ ์ธ ๋ถ๋ถ์ ์คํ ํ์ด๋ฐ ๋๋ฌธ์ ์ด๋ฐ ์ ๊ธฐํ ์ผ์ด ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
JavaScript ์์ง์, ๋ฐํ์ ์ด์ ๋จ๊ณ์ธ ์์ค์ฝ๋ ํ๊ฐ ๋จ๊ณ์์, ๋ณ์ ์ ์ธ์ ํฌํจํ ๋ชจ๋ ์ ์ธ๋ฌธ์ ์ฐพ์๋ด๊ณ ์คํ์ํจ๋ค.
๊ทธ๋ฌ๋๊น ๋ณ์ ์ ์ธ์ด ์ด๋์ ์๋ , ๋ค๋ฅธ ์ฝ๋๋ค ๋ณด๋ค ๋จผ์ ์คํ๋๋ค๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ธ์ด ์ฝ๋์ ์ด๋๋ถ๋ถ์ ์์ฑ๋์ด์๋ ์ง ๋ณ์๋ฅผ ์๋ฌด๋ฐ์๋ ์ฐธ์กฐํ ์ ์๋ค.
์ด๋ฌํ ํน์ฑ์ ๋ณ์ ํธ์ด์คํ Hoisting ์ด๋ผ๊ณ ํ๋ค.
๋ณ์ ๋ฟ๋ง ์๋๋ผ, var, let, const, functon, function*, class ํค์๋๋ฅผ ์ฌ์ฉํด ์ ์ธํ๋ ๋ชจ๋ ์๋ณ์๋ hoisting ๋๋ค๋ ๊ฑธ ๊ธฐ์ตํ์!
์ด์ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฃฐ ๋ด์ฉ์ด ํ๋๋ฐ์ ๋จ์ง ์์๋ค.
๊ฐ์ ํ ๋น๊ณผ ์ฌํ ๋น์ด๋ค.
ํ ๋น์ด๋, ๋ณ์์ ๊ฐ์ ๋์ , ์ ์ฅํ๋ ๊ฒ์ด๋ค.
์ด๋๋ ํ ๋น ์ฐ์ฐ์์ธ = ์ ์ฌ์ฉํ๋ฉฐ, ์ฐ๋ณ์ ๊ฐ์ ์ข๋ณ์ ๋ณ์์ ์ ์ฅํ๋ค.
let score = 80;
์ ์ธ๊ณผ ํ ๋น์ ํ๋์ ๋ฌธ์ผ๋ก ์์ฑ๋์ด ์์ผ๋ฉด, ํธ์ด์คํ
์ด ์ด๋ป๊ฒ ์ ์ฉ๋ ๊น??
๊ทธ๋๋ ์ ์ธ๊ณผ ํ ๋น์ ์คํ ์์ ์ ๋ค๋ฅด๋ค.
์ ์ธ์ ๋ฐํ์ ์ด์ , ํ ๋น์ ๋ฐํ์์ ์ผ์ด๋๋ค.
JavaScript ์์ง์ด ์ด๋ฅผ 2๊ฐ์ ๋ฌธ์ ๋๋์ด ์คํํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ณ์์ ๊ฐ์ ํ ๋นํ๊ณ ์ฌํ ๋นํ ๋, ๋ฉ๋ชจ๋ฆฌ์์๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น?
๋ณ์์ ๊ฐ์ ํ ๋นํ๊ธฐ ์ , ๊ทธ ๊ณต๊ฐ์๋ undefined๋ผ๋ ๊ฐ์ด ์ ์ฅ๋๋ค๊ณ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ์ด ํ ๋น๋๋ค๋ ๊ฑด, ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ undefined๋ฅผ ์ง์ฐ๊ณ ๋ค์ 80์ ๊ทธ๊ณณ์ ์ฑ์๋ฃ๋ ๊ฑธ๊น?
์ข์ ์๊ฐ์ด์ง๋ง, ์ฌ์ค๊ณผ๋ ๋ค๋ฅด๋ค.
JavaScript์์ ๊ฐ์ ํ ๋นํ ๋๋, ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ ๋ค์ ๊ทธ๊ณณ์ ํ ๋น๊ฐ์ ์ ์ฅํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ์ ์ฌํ ๋น ํ๋ ๊ฒฝ์ฐ์๋ ์ด๋จ๊น?
๋ค์ ์ฝ๋์ ๊ฐ์ด score์ 90์ ์ฌํ ๋น ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์.
let score = 90;
๋ณ์์ ๊ฐ์ ์ฒ์ ํ ๋นํ๋ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
80์ ์ง์ฐ๊ณ 90์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ, ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ๊ทธ๊ณณ์ 90์ ์ ์ฅํ๋ค.
๊ทธ๋ผ ์ด๋ฒ ์ฃผ์ ๋ง์ง๋ง ์ง๋ฌธ์ ๋์ ธ๋ณด๊ฒ ๋ค.
๋ณ์๋ฅผ ์ฌํ ๋นํ๋ ๊ฒฝ์ฐ, ๊ธฐ์กด์ ํ ๋น๋์ด ์๋ ๊ฐ์ ์ด๋๋ก ์ฌ๋ผ์ง๋ ๊ฑธ๊น?
๊ทธ๋ฌ๋๊น,,, ์ 80์ด๋ผ๋ ๊ฐ์ด ์ ์ฅ๋์ด์๋ ๊ณต๊ฐ์ ์ด๋ป๊ฒ ๋๋๊ฑธ๊น?
๋์ด์ ์๋ฌด๋ ์ฌ์ฉํ์ง ์๋ ์ด๋ฐ ๊ฐ๋ค์,
JavaScript์ Garbage Collector ์ ์ํด ๋ฉ๋ชจ๋ฆฌ์์ ์๋ ํด์ ๋๋ค.
์ด Garbage Collector๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํด์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๋ค.
์ธ์ด ์์ฒด์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ด๋ฆฌํ๋ ์ด๋ฌํ ์ธ์ด๋ฅผ ๋งค๋์ง๋ ์ธ์ด๋ผ๊ณ ํ๋ค.
๊ฐ๋ฐ์์ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ฅผ ํ์ฉํ์ง ์๋๋ค๋ ๋ง์ด๋ค.
์ธ๋งค๋์ง๋ ์ธ์ด์ธ C์ธ์ด๋ malloc-free๊ฐ์ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์ ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
JS๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ฐจ๋จํ์ฌ ์น๋ช
์ ์ธ ์ค๋ฅ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ์๋ค๊ณ ํ๋ค.
JavsScript์ ๋ฌธ๋ฒ์ ์์ด์ ๊ฐ์ฅ ๊ธฐ์ด์ ์ด๊ณ ๊ฐ๋จํ ๋ณ์์ ๋ํด ์ ๋ฆฌํด๋ณด์๋ค.
์๊ฐ๋ณด๋ค C์ธ์ด์ ์ฐจ์ด์๋ ํน์ง์ด ๊ฝค ์์๋ ๊ฒ ๊ฐ์์ ํฅ๋ฏธ๋ก์ ๋ค.
์์ผ๋ก ์ฒ์ ๋ค์ด๋ณด๋ ๊ฐ๋ ๋ ๋ง์ด ๋์ค๊ฒ ์ง๋ง, ๊ทธ๋๋ ์ด๋ฐ ํฅ๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์ด์ฌํ ๊ณต๋ถํด๋ณด๊ฒ ๋ค..!