
JavaScript์ ์๋ฃํ์ ๋ํด ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ์.
์ผ๋จ ์๋ฃํ์ด๋ผ๋ ๊ฑด, ๊ฐ์ ์ข ๋ฅ์ด๋ค.
JavaScript์ ๋ชจ๋ ๊ฐ์ data type์ ๊ฐ์ง๋๋ฐ, ES6์ ๊ฒฝ์ฐ 7๊ฐ์ง๊ฐ ์๋ค.
์ด๋ primitive type(์์ ํ์
)๊ณผ object/reference type(๊ฐ์ฒด ํ์
)์ผ๋ก ๋๋๋ค.
c๋ int, long, float, double ๋ฑ ๋ค์ํ ์ซ์ ํ์ ์ ์ ๊ณตํ๋ค.
JavaScript๋ ์ด๋จ๊น?
๋๋๊ฒ๋ JavaScript๋ ์ซ์ ํ์ ์ด ๋ฑ ํ๋ ์กด์ฌํ๋ค.
๋ชจ๋ ์๋ฅผ ์ค์๋ก ์ฒ๋ฆฌํ๋ฉฐ, ์ ์๋ฅผ ์ํ integer type์ ์กด์ฌํ์ง ์๋๋ค.
๋๋ฌธ์ ์ ์๋ก ํ์ํ๋ ์ซ์๋ ์ฌ์ค์ ์ค์์ด๊ณ , ์ ์๋ผ๋ฆฌ ๋๋์ ์ ํด๋ ๊ฒฐ๊ณผ๊ฐ ์ค์๋ก ๋์ฌ ์๋ ์๋ค.
console.log(5 / 2); // 2.5
JavaScript์์ ์ฌ์ฉ๋๋ ํน์ํ ์ซ์ ๊ฐ๋ค์ด ์๋ค.
console.log(Math.pow(10, 1000)); // Infinity
console.log(1000 / 0); // Infinity
console.log(-1000 / 0); // -Infinity
console.log(0 / 0); // NaN
console.log(Math.sqrt(-1)); // NaN
console.log("text" - 2); // NaN
Infinity : ์์ ๋ฌดํ๋-Infinity : ์์ ๋ฌดํ๋NaN : ์ฐ์ ์ฐ์ฐ ๋ถ๊ฐ (not a number)ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ ๋ฐ์ ์ฌ์ฉํ๋ ์๋ฃํ์ด๋ฉฐ, ์ ์ธ๊ณ ๋๋ถ๋ถ์ ๋ฌธ์๋ฅผ ํํํ ์ ์๋ค.
'', "", `` ์ผ๋ก ํ
์คํธ๋ฅผ ๊ฐ์ธ์ฃผ๋๋ฐ, ''์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ํ๊ธฐ๋ฒ์ด๋ค.
ํ ์คํธ๋ฅผ ๊ฐ์ธ์ฃผ์ง ์์ผ๋ฉด, ํค์๋๋ ์๋ณ์ ๊ฐ์ ํ ํฐ๊ณผ ๊ตฌ๋ณํ๊ธฐ๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ด๋ค.
JavaScript์์ ๋ฌธ์์ด์ ํ ๋ฒ ์์ฑํ๋ฉด, ๋ณ๊ฒฝํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ES6๋ถํฐ ์๋ก์ด ๋ฌธ์์ด ํ๊ธฐ๋ฒ์ด ๋์ ๋์๋ค.
์ด ํ๊ธฐ๋ฒ์ template literal์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์ฐจ์ด์ ์ ์์ฃผ๋ก ์์๋ณด์.
template literal์, '', "" ๋์ ``์ ์ฌ์ฉํ๋ค.
์ผ๋ฐ ๋ฌธ์์ด์์๋ ์ค๋ฐ๊ฟ์ ํ์ฉํ์ง ์์๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ \n ๊ฐ์ escape sequence๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ค. ํ์ง๋ง template literal์ multiline string์, escape sequence ์์ด๋ ์ค๋ฐ๊ฟ์ด ํ์ฉ๋๊ณ , ๋ชจ๋ ๊ณต๋ฐฑ์ ๊ทธ๋๋ก ํฌํจํ๋ค.
๋ฌธ์์ด์ +๋ก ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋ค. ํผ์ฐ์ฐ์ ์ค ํ๋ ์ด์์ด ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ, ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์๋ก ๋์ํ๋ค.
๋ฌธ์์ด ์ฝ์
์ ๊ฐ๋จํ๊ฒ ํ ์ ์๋ค. ${~~~} ๋ก ํํ์์ ๊ฐ์ธ์ฃผ๋ฉด, ๋ฌธ์์ด์ด ์๋๋๋ผ๋ ํ์
์ด ๊ฐ์ ๋ก ๋ฌธ์์ด๋ก ๋ณํ๋์ด ์ฝ์
๋๋ค.
์กฐ๊ฑด๋ฌธ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์๋ฃํ์ด๋ค.
true, false ๋๊ฐ์ง ๊ฐ์ด ์กด์ฌํ๋ค.
undefined ํ์ ๊ฐ์ผ๋ก๋ undefined๊ฐ ์ ์ผํ๋ค.
๋ณ์ ํํธ์์ ์ด๋ฏธ ์ดํด๋ดค๋ฏ์ด, ๊ฐ๋ฐ์๊ฐ ์๋์ ์ผ๋ก ํ ๋นํ ๊ฐ์ด ์๋, JavaScript ์์ง์ด ๋ณ์๋ฅผ ์ด๊ธฐํํ ๋ ์ฌ์ฉํ๋ ๊ฐ์ด๋ค.
๊ฐ๋ฐ์๊ฐ undefined๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ณ์ ์ฌ์ฉ์ ํผ๋์ด ์๊ธธ ์ ์์ผ๋ ์๋์ ์ผ๋ก ์ด๋ฅผ ํ ๋นํ์ง ์๋๋ก ํ์.
๊ฐ์ด ์์์ ๋ํ๋ด๊ณ ์ถ์ ๋๋, ์ฃผ๋ก null์ ์ฌ์ฉํ๋ค.
null ํ์ ์ ๊ฐ๋ null์ด ์ ์ผํ๋ค.
๋์๋ฌธ์์ ์ ์ํ๋๋ก ํ์!
ES6์์ ์ถ๊ฐ๋ 7๋ฒ์งธ ํ์ ์ด๋ค.
๋ค๋ฅธ ๊ฐ๊ณผ ์ค๋ณต๋์ง ์๋ ์ ์ผ๋ฌด์ดํ ๊ฐ์ด๋ค.
์ฃผ๋ก ์ด๋ฆ์ด ์ถฉ๋ํ ์ํ์ด ์๋ ๊ฐใ ์ฒด์ ์ ์ผํ ํ๋กํผํฐ ํค๋ฅผ ๋ง๋คใ ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
symbol ์ด์ธ์ ๊ฐ๋ค์ ๋ชจ๋ literal์ ํตํด ์์ฑํ์ง๋ง, symbol์ Symbol ํจ์๋ฅผ ํธ์ถํด ์์ฑ๋๋ค.
ES11/ES2020์์ ๋์ ๋์๋ค๊ณ ํ๋ค.
๋งค์ฐ ํฐ ์ ์๋ฅผ ํํํ ์ ์๋ ์๋ฃํ์ด๋ค.
ES6์์๋ ๋์ ๋์ง ์์์ง๋ง, ์ต์ ๋ฒ์ ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ฃํ์ด๋ผ๊ณ ํ๋ค!
์๋ฃํ
- ์์ ํ์
์ซ์, ๋ฌธ์์ด, Boolean, undefined, null, symbol, BigInt- ๊ฐ์ฒด ํ์
์์์๋ ๊ฐ๋จํ ์ด์ผ๊ธฐ ํ์ง๋ง, ์ข ๋ ์ ๋๋ก ์ ๋ฆฌํด๋ณด์.
๊ฐ์ด๋ผ๊ณ ํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์ฐธ์กฐํ ์ ์์ด์ผ ํ๋ค.
๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ ค๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํด์ผํ๋๋ฐ, ์ด ํฌ๊ธฐ๊ฐ data type์ ๋ฐ๋ผ ์ ํด์ง๋ค.
๊ทธ๋ฐ๋ฐ ์ซ์์ ๋ฌธ์์ด ํ์ ์ด์ธ์ ๋๋จธ์ง data type์ ํฌ๊ธฐ๋, ECMAScript์์ ๋ช ์์ ์ผ๋ก ๊ตฌํํด๋์ง ์์๋ค. ๊ทธ๋์ JavaScript ์์ง ์ ์กฐ์ฌ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๋ค.
์ด ๋ถ๋ถ์ด ์ข ์์ํด์ ์งํผํฐํํ ๋ฌผ์ด๋ดค๋๋,,,
JavaScript๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ์ ๊ฐ์ ์ธ๋ถ ์ฌํญ์ ์ ๊ฒฝ ์ฐ์ง ์๋๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์, ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ๋ถ๋ถ์ ์์ง์ ๋งก๊ธฐ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์ค์ํ ๊ฒฝ์ฐ, TypedArray์ ๊ฐ์ ์ ์์ค ๋๊ตฌ๋ฅผ ํ์ฉํ๊ฑฐ๋ ์ฑ๋ฅ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ์ต์ ํ๋ฅผ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
?? ๋ผ๋ ๋ต๋ณ์ ,,,,,,, ๋ด๊ฐ ์ฌ๊ฐํ๊ฒ ์๊ฐํ๋ ๊ฒ์ ๋นํด ๊ทธ๋ฅ ์ค์ํ ๋ด์ฉ์ด ์๋๊ฐ๋ณด๋ค (?)
๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ค๋ฉด, ํ๋ฒ์ ์ฝ์ด๋ค์ฌ์ผ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ์์์ผํ๋ค.
์ด๋ฅผ ์ํด์๋ ๋ณ์์ ํ ๋น๋ ๊ฐ์ data type์ผ๋ก ๋ณ์์ type์ ์ธ์ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ด๋ ๋ฏ JavaScript์ ๋ชจ๋ ๊ฐ์ ๊ฐ์์ data type์ ๊ฐ์ง์ง๋ง, ๋ณ์๋ ๊ทธ๋ ์ง ์๋ค.
Java, C ๊ฐ์ ์ ์ ํ์ ์ธ์ด๋, ๋ณ์ ์ ์ธ์ ํ ๋นํ ์ ์๋ ๊ฐ์ ์ข ๋ฅ๋ฅผ ์ฌ์ ์ ์ ์ธํด์ผํ๋ค.
์ ์ํ์
์ธ์ด์ ๋๋น๋๋ ํน์ง์ ๊ฐ์ง JavaScript๊ฐ์ ์ธ์ด๋ค์ ๋์ ์ธ์ด๋ผ๊ณ ํ๊ณ , ์ด์๋ Pytho, PHP, Ruby ๋ฑ์ด ํด๋นํ๋ค.
์ ๋ฆฌํ์๋ฉด JavaScript๋ ๋ณ์ ์ ์ธ์ type ์ ์ธ์ ํ์ง ์๋๋ค.
JavaScript ๋ณ์์ type์, ์ ์ธ์ด ์๋ ํ ๋น์ ์ํด type์ด ๊ฒฐ์ ๋๊ณ , ์ด๋ฅผ type inference(ํ์
์ถ์ถ)์ด๋ผ๊ณ ํ๋ค.
์ฌ์ค ์ ์ ํ์ ์ธ์ด๋, ๋ณ์์ ํ์ ์ ๋ง๋ ๊ฐ๋ง ํ ๋น์ด ๊ฐ๋ฅํ๋ค.
์ปดํ์ผ ์์ ์ type ์ฒดํฌ๋ฅผ ํด์, ํต๊ณผํ์ง ๋ชปํ๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์์ผ type์ ์ผ๊ด์ฑ์ ๊ฐ์ ํ๊ณ ์์ ์ ์ธ ์ฝ๋๋ฅผ ๊ตฌํํ๋ค.
์ ์ ํ์ ์ธ์ด์ ์ด๋ฌํ ์ฅ์ ์, JavaScript์ ๋จ์ ์ด ๋๊ธฐ๋ ํ๋ค.
๋ณ์์ type์ด ํ์คํ์ง ์์ ๊ฒฝ์ฐ, JavaScript ์์ง์ด type์ ์์ธกํ๋ค๊ฐ ๋ง์๋๋ก type์ ๋ณ๊ฒฝํด๋ฒ๋ฆด ์๋ ์๋ค.
ํ๋ก๊ทธ๋๋จธ๊ฐ type์ ํ์คํ๊ฒ ๊ด๋ฆฌํ๋ฉด ์ด๋ฐ ์ผ์ด ์ผ์ด๋์ง ์๋๋ค๊ณ ํ๋ค.
๊ทธ๋ฌ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋๋ type ๊ด๋ฆฌ๋ฅผ ์ ํด์ฃผ๋๋ก ํ์..
๊ทธ๋ฌ๋๊น ๋ณ์ ์ฌ์ฉ์ ์ ์ฐ์ฑ์ด๋ผ๋ ์ฅ์ ์ด ์์ง๋ง, ์ ๋ขฐ์ฑ์ด ๋ฎ๋ค๋ ์น๋ช ์ ์ธ ๋จ์ ์ด ์๋ค๋ ๊ฒ์ด๋ค.
- ๋ณ์๋ ๊ผญ ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
- ๋ณ์์ scope๋ ์ต๋ํ ์ข๊ฒ ๋ง๋ ๋ค. (์ข์์๋ก ์ค๋ฅ ๋ฐ์ ํ๋ฅ ์ด ์ค์ด๋ ๋ค)
- ์ ์ญ ๋ณ์๋ ์ต๋ํ ์ฌ์ฉํ์ง ์๋๋ก ํ์
- ๋ณ์๋ณด๋ค๋ ์์๋ฅผ ์ฌ์ฉํ์
- ๋ณ์ ์ด๋ฆ์, ๋ชฉ์ ์ด๋ ์๋ฏธ๋ฅผ ํ์ ํ ์ ์๋๋ก ์ค์ ํ์
์คํด๋ฅผ ๋ถ๋ฌ ์ผ์ผํค๋ ์ฝ๋๊ฐ ์๋, ์ฌ๋์ด ์ดํดํ๊ธฐ ์ข์ ๋ช ํํ ์ฝ๋๊ฐ ์ข์ ์ฝ๋์์ ๋ช ์ํ์!!
์ฑ ์ BigInt๊ฐ ๋์์์๋์ง ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
์ ๋ฆฌ๋ฅผ ํ๋ค๋ณด๋ ๋ด๊ฐ ์๋ JavaScript data type๊ณผ ์กฐ๊ธ ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ๋ค๋ฅธ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๋ฉฐ ์์ฑํด๋ณธ ๊ธ์ด๋ค.
JavaScript ๋ณ์๋ฅผ ์ฌ์ฉํ ๋, ์ต๋ํ ๋ณ์๋ณด๋ค๋ ์์๋ฅผ ์ฌ์ฉํด์ผํ๋ ๊ฒ์ด ์ข๋ค๋ ๊ฒ ์ดํด๋ ๋์ง๋ง ์์ง ์ ์๋ฟ์ง๋ ์๋ ๊ฒ ๊ฐ๋ค.
๋์ค์ JavaScript๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉฐ ์ดํดํ ์๊ธฐ๊ฐ ์ค๊ธฐ๋ฅผ ๊ธฐ๋ํด๋ณด๊ฒ ๋ค!!