[ํด๋ผ์ฐ๋ฉ ์ดํ๋ฆฌ์ผ์ด์ ์์ง๋์ด๋ง TIL] 240105 - JS ๋ฐ์ดํฐ์ ํํ
Intro..
๋ณธ๊ฒฉ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ต์ ๋ค์ด๊ฐ๋ค.
๊ฐ์์ ํจ๊ป ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive ์ฑ ์ ๋ณด๋ฉฐ ๊ณต๋ถํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์ค๋๋ง์ ์ฑ ์ ๊บผ๋๋ค.
์ ์ ๋ฆฌํด๋์ผ์ง
์ค๋ ํ์ตํ ๋ด์ฉ
: ๋ฐ์ดํฐ์ ํํ
๋ณ์๋?
: ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ์ฝ๊ฒ ์๋ณํ๊ธฐ ์ํด ๋ถ์ธ ์ด๋ฆ
์ปดํจํฐ๋ CPU๋ก ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ๊ฐ์ ์ฃผ์๋ฅผ ๊ฐ์ง ๊ณต๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ๊ฐ์ ์ฐธ์กฐํ๊ธฐ๋ ์ด๋ ค์ฐ๋ ์๋ณ์(๋ณ์ ์ด๋ฆ)๋ฅผ ์ง์ ํด ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ ์ ์๋ค.
๋ณ์ ๋ฌธ๋ฒ
let, const, var ํค์๋๋ก ๋ณ์๋ฅผ ํ ๋นํ๋ค.
var
- ์ฝ๋ ํ๊ฐ๋จ๊ณ: ์ ์ธ๊ณผ ๋์์ ๋ณ์ ์ด๊ธฐํ ์งํ
- ์ฝ๋ ์คํ๋จ๊ณ: ๊ฐ ํ ๋น ์งํ
์ฝ๋ ํ๊ฐ ์์ ์ ๋ณ์ ์ด๊ธฐํ๊ฐ ๋์ด์์ผ๋ฏ๋ก, ํ ๋น๋ฌธ์ด ์คํ๋๊ธฐ ์ ์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค. (ํธ์ด์คํ )
โ ํธ์ด์คํ
: ์ ์ธ๋ฌธ์ด ํด๋น ์ค์ฝํ์ ์ ๋๋ก ์ฎ๊ฒจ์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ํน์ฑ
์์) ๋ณ์ a๋ฅผ ์ ์ธํ๊ธฐ ์ ์ a๋ฅผ ํธ์ถํ๋ฉด ํธ์ด์คํ ํน์ฑ ๋๋ฌธ์ ์ด๋ฏธ ์ฝ๋ ํ๊ฐ๋จ๊ณ์์ ๋ณ์ ์ด๊ธฐํ๋ฅผ ์งํํ๊ธฐ ๋๋ฌธ์ Error๊ฐ ๋์ง ์๊ณ ์ด๊ธฐํ๋ undefined๋ฅผ ์ถ๋ ฅํ๋ค.
console.log(a) // undefined
var a
var์ ๋จ์
- ํค์๋ ์๋ต ๊ฐ๋ฅ
- ์ค๋ณต ์ ์ธ ๊ฐ๋ฅ
- ๋ณ์ ํธ์ด์คํ
- ์ ์ญ ๋ณ์ํ -> ๋ฌด๋ถ๋ณํ ๋ณ์ ์ ๊ทผ์ผ๋ก ์๋์น ์์ ๋ณ์๊ฐ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ์ ์๋ค.
const, let
- ์ฝ๋ ํ๊ฐ๋จ๊ณ: ์ ์ธ๋ง ์งํ
- ์ฝ๋ ์คํ๋จ๊ณ: ์ด๊ธฐํ ์งํ, ๊ฐ ํ ๋น ์งํ
- ๋ธ๋ก๋ ๋ฒจ ์ค์ฝํ -> var๊ณผ ๋ฌ๋ฆฌ ์์ธก ๊ฐ๋ฅํ ๋ฒ์ ๋ด์์ ๋ณ์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ค.
const: ์์ ๋ถ๊ฐ๋ฅํ ์์ ๋ณ์, ๋ณ์ ์ ์ธํ ๋ ๋ฌด์กฐ๊ฑด ๊ฐ์ ํ ๋นํด์ผ ํ๋ค.
let: ์ฌํ ๋น์ด ๊ฐ๋ฅํ ๋ณ์, ๊ฐ์ ํ ๋นํ์ง ์์๋ ์์ฑํ ์ ์๋ค.
๋ณ์ ๋ค์ด๋ฐ ์ปจ๋ฒค์
- camelCase
- snake_case
- PascalCase
- CONSTANT_CASE
์ฃผ๋ก ๋ณ์๋ช ์ camelCase๋ฅผ ์ฌ์ฉํ๊ณ ์์ฑ์, ํด๋์ค ์์ฑ์์ PascalCase๋ฅผ ์ฌ์ฉํ๋ค.
์๋ฃํ์ด๋?
์ฐ๋ฆฌ๋ ์ปดํจํฐ์๊ฒ ๋ฐ์ดํฐ์ ์กธ๋ฅ๋ฅผ ์ง์ ํด์ฃผ๊ณ , ์๋ ค์ฃผ์ด์, ๋ฐ์ดํฐ ์ข ๋ฅ์ ๋ง๊ฒ ์ ํฉํ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ํด์ฃผ์ด์ผ ํ๋ค.
๋ฐ์ดํฐ ์ข ๋ฅ๋ฅผ ๋ฐ์ดํฐ ํ์ , ์๋ฃํ์ด๋ผ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐ์ดํฐ ํ์
: ์์ํ์ ๊ณผ ๊ฐ์ฒดํ์ ์ด ์กด์ฌํ๋ค.
- ์์ ํ์
- String, Number, BigInt, undefined, Null, Boolean, Symbol
- ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฐ์ด๋ค. (immutable value)
- "๊ฐ"์ผ๋ก์ ์ ๋ฌ๋๋ค. (์ฐธ์กฐ ํํ X)
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋นํธ์ธ ๊ฐ์ฒด๋ก ์์ ๋ํผ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ์กด์ฌํ๋ค.
- ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ํด๋น ๋ํผ ๊ฐ์ฒด๋ค์ ์์๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
์์) string ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ง str ๋ณ์๊ฐ ๋ง์น ๊ฐ์ฒด์ธ ๊ฒ ์ฒ๋ผ str.length ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
let str = 'hello'
console.log(str.length) // 5
- ๊ฐ์ฒด ํ์
- ์์ ํ์ ์ ์ ์ธํ ๊ฐ
- ์ผ๋ฐ ๊ฐ์ฒด, ํจ์, ๋ ์ง, ์ธ๋ฑ์ค ์ปฌ๋ ์ , ํค ์ปฌ๋ ์ , ...
- ์ฐธ์กฐ ๋ฐฉ์์ผ๋ก ์ ๋ฌ๋๋ค. (Pass By Reference)
- ๊ฐ์ฒด๋ ์์ฑ๋ค์ ๋ณ๊ฒฝํ ์ ์๋ mutableํ ๊ฐ์ด๋ค.
์์ํ์
- Number
- ์ซ์์๋ ์ ์, ์ค์๊ฐ ์กด์ฌํจ
- ๋ค๋ฅธ ์ธ์ด์์ int, long, float, double...๋ฑ์ด ์์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ๋์ ์ซ์ ํ์ ์ธ Number๋ง ์กด์ฌํ๋ค.
- ๋ฐฐ์ ๋ฐ๋ 64๋นํธ ๋ถ๋์์์ (IEEE 754) ํ์ -> 0.1 + 0.2 !== 0.3
- -(2^53-1) ~ (2^53-1)์ ์ → ์์ ๋ํผ๊ฐ์ฒด์์ ์์ ๋ณ์๋ก ์ ๊ณต (Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER)
- infinity: ๋ฌดํ๋
- NaN: Not A Number ์ค์๋ง (์ซ์๊ฐ ์๋๋ค๋ ๋ป)
- BigInt
- ์์ ์ ๋ฐ๋๋ก ์ ์๋ฅผ ๋ํ๋ผ ์ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ซ์ ์์๊ฐ
- BigInt๋ Number์ ์ต๋๊ฐ์ ๋๋ ์ ์๋ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ์ฐ์ฐํ ์ ์๋ค.
- ๋ค๋ฅธ ํ์ ๊ณผ ํผํฉํ์ฌ ์ฐ์ฐํ ์ ์๋ค.
- String
- UTF-16 ์ฝ๋ ๋จ์์ ์ํ์ค๋ก ํํ
- 16๋นํธ ์ ์๊ฐ์ ์์๋ก ๊ตฌ์ฑ๋ ์งํฉ
- ๊ฐ ์์๊ฐ string์ ํ ์๋ฆฌ
- ๋ฐฐ์ด์ฒ๋ผ 0๋ฒ์งธ index๋ถํฐ ์์ํ๋ค.
- ์์๊ฐ์ ๋ถ๋ณ === ๋ฌธ์๊ฐ์ ๋ถ๋ณ
- "". `` ๋ฅผ ์ฌ์ฉ
- UTF-16 ์ฝ๋ ๋จ์์ ์ํ์ค๋ก ํํ
let a = 'test'
console.log(`Hi, this is ${a}`)
- Boolean
- ์ฐธ ํน์ ๊ฑฐ์ง
- undefined
- ๋ณ์๋ฅผ ์ ์ธํ ํ ๊ฐ์ ํ ๋นํ์ง ์์ ๋ณ์์ ํ ๋น์ด ๋๋ ๊ฐ
- ๊ฐ๋ฐ์๊ฐ ์๋ํด์ ๋ฃ์ ์ ์๋ค.
- null
- ๊ฐ์ด ์๋ค๋ ๊ฒ์ ์๋์ ์ผ๋ก ํํํ ๋
- ์ด์ ์ ์ฐธ์กฐ๋์๋ ๊ฐ์ ์๋์ ์ผ๋ก ๋์ด์ ์ฐธ์กฐํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ
typeof null; // 'object'
// null์ ํ์
์ ์ค๋ธ์ ํธ๋ผ ์ผ์น ์ฐ์ฐ์๋ก ์ฒดํฌํ๋ ๊ฒ์ด ์ข์
const foo = null;
foo === null; // true
- Symbol
- ES6์ ์ถ๊ฐ๋ ํ์
- ์ค๋ณต๋์ง ์์ ์ ๋ํฌํ ๊ฐ
- ๊ฐ์ฒด์ key๋ก ์ฌ์ฉ๋ ์ ์๋ค.
- ํด๋์ค๋ ๊ฐ์ฒด ํ์์ ๋ด๋ถ์์๋ง ์ ๊ทผํ ์ ์๋๋ก ์ ์ฉ ๊ฐ์ฒด ์์ฑ์ ํค๋ก ์ฌ์ฉ
- Symboleํจ์๋ฅผ ํธ์ถํ์ฌ ์์ฑํ๋ค.
๊ฐ์ฒด ํ์ (Reference Type)
: ๋ค์ํ ํ์ ์ ๊ฐ์ ํ๋์ ๋จ์๋ก ๊ตฌ์ฑํ ๋ณตํฉ์ ์ธ ์๋ฃ๊ตฌ์กฐ
์์ ํ์ ์ ์ ์ธํ ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด ํ์
- mutable: ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ (์์: immutable)
- ํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ: ๋์ ์ผ๋ก ๋ณํ๊ฐ๋ฅ, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ๋ณด ๋ฐ ์ ์ฅ
- pass-by-reference (์ฐธ์กฐ์ ์ํ ์ ๋ฌ)
๋์ ํ์ ์ธ์ด
: ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์ ์ธ์ด์ด๋ฉฐ, ์๋์ ์ผ๋ก ํ์ ์ ๋ณํํ ์๋ ์์ง๋ง ์๋์ ์๊ด์์ด ๋ณ๊ฒฝ๋๊ธฐ๋ ํ๋ค.
- ๋ช
์์ ํ์
๋ณํ
- ๊ฐ.toString()
- Number(๊ฐ)
- Boolean(๊ฐ)
- ์๋ฌต์ ํ์
๋ณํ
- ๊ฐ + "": ๋ฌธ์์ด ํ์ ์ผ๋ก ๋ณํ
- ๊ฐ * 1: ์ซ์ ํ์ ์ผ๋ก ๋ณํ
- !!๊ฐ: ๋ถ๋ฆฌ์ธ ํ์ ์ผ๋ก ๋ณํ
๊ฐ์ด ์ ๋ฌ๋ ๋, ๊ฐ๋ฐ์ ์๋์ ๋ค๋ฅด๊ฒ ์๋ฌต์ ํ์ ๋ณํ์ด ์ผ์ด๋ ์ ์์ด ํ์ ์ถ๋ก ์ด ์ด๋ ค์์ ธ ๋ถํ์ํ ๋๋ฒ๊น ์๊ฐ์ด ๋ฐ์๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ ๋ฌ๋๋ ์์ ๋ง๋ค typeof๋ ์ผ์น ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ํ์ guard๋ฅผ ๊ตฌํํ๊ฑฐ๋ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ค.
๋ง๋ฌด๋ฆฌ
๋ถ๊ธ์ด๋ผ ์ผ๋ฅธ ๊ณต๋ถ๋ฅผ ๋๋ด๊ณ ์ถ์ ๋ง์์ ๊ธ์์ผ์ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋ฐ๋ก TIL์ ์์ฑํ์ง ์๊ณ ๋ฏธ๋ค์ ๋ค์๋ ์ ์์ฑํ๋ค.
TIL์ ์๋ฏธ๊ฐ ์กฐ๊ธ ์ฌ๋ผ์ง ๊ฒ ๊ฐ์ ๋ค์ ์ค๋ ํ๋ฃจ ๋ฐฐ์ด ๊ฒ์ ๋น์ผ์ ์์ฑํ ์ ์๋๋ก ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.