01. Types (ํ) โ
๊ฐ์ ํน์ฑ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ ์ต๊ด์ด ์ค์ํ๋ค.
๐งฉ Note
Airbnb ๊ฐ์ด๋๊ฐ ๋งํ๋ Type ๊ตฌ๋ถ
์ ๋จ์ ๋ถ๋ฅ๊ฐ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌ vs ์ฐธ์กฐ ๋์
์ ์ดํดํ๋ผ๋ ๋ฉ์์ง๋ค. ์ฆ, ๊ฐ์ด ๋ณต์ฌ๋๋๊ฐ?, ์ฐธ์กฐ๊ฐ ๊ณต์ ๋๋๊ฐ?๋ฅผ ๊ตฌ๋ถํ ์ ์์ด์ผ ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
- React, Redux, Zustand ๊ฐ์ ์ํ ๊ด๋ฆฌ์์๋ ๋ถ๋ณ์ฑ(immutability) ๊ฐ๋ ์ ์ฌ๊ธฐ์ ๋น๋กฏ๋๋ค.
- ์์ํ์ ์ ๊ฐ์ ๋ฐ๋ก ๋ณต์ฌํ์ง๋ง, ์ฐธ์กฐํ์ ์์ ๋ณต์ฌ(shallow copy)๋ง์ผ๋ก๋ ์์ ํ ๋ ๋ฆฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๋ฐ๋ผ์ spread ์ฐ์ฐ์
({ ...obj }, [...arr])
๋structuredClone()
๊ฐ์ ๋๊ตฌ๋ก ์์ ํ ๋ณต์ ๋ฅผ ์ํํด์ผ ํ๋ค.
๐งฉ Related Concepts
1. Primitive Types (์์ํ) โ
์์ํ์ ์ ๊ทผํ๋ฉด ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํ์ฌ ์กฐ์ํ๊ฒ ๋๋ค.
์ฆ, ์๋ก์ด ๋ณ์์ ๋์
ํด๋ ์๋ก ๋
๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ค.
string
number
boolean
null
undefined
symbol
bigint
const foo = 1;
let bar = foo;
bar = 9;
console.log(foo, bar); // 1, 9
// `foo`์ ๊ฐ์ ๋ณํ์ง ์๋๋ค. ์์ํ์ Stack ์์ญ์ ์ ์ฅ๋ ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ.
โ ๏ธ Symbol๊ณผ BigInt ์ฃผ์ โ
- Symbol๊ณผ Bigint๋ ์์ ํ ํด๋ฆฌํ(polyfill)ํ ์ ์๋ ํ์ ์ด๋ค.
- ์ธ์ด ์์ง ๋ ๋ฒจ์์ ๋์ํ๊ธฐ ๋๋ฌธ์, ๊ตฌํ ๋ธ๋ผ์ฐ์ (IE ๋ฑ)์์๋ ์๋ฒฝํ ํ๋ด ๋ผ ์ ์๋ค.
๋ฐ๋ผ์ Airbnb ๊ฐ์ด๋๋ "Symbol
, BigInt
๋ ์์ ํด๋ฆฌํ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, ์ง์๋์ง ์๋ ํ๊ฒฝ์์๋ ์ฌ์ฉํ์ง ๋ง๋ผ"๊ณ ๊ถ์ฅํ๋ค.
2. Reference Types (์ฐธ์กฐํ) โ
์ฐธ์กฐํ์ ์ ๊ทผํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(์ฐธ์กฐ)๋ฅผ ํตํด ๊ฐ์ ์ ๊ทผํ๋ค.
์ฆ, ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ๋ณ์๋ ์๋ก ์ํฅ์ ์ค๋ค.
object
array
function
const foo = [1, 2];
const bar = foo;
bar[0] = 9;
console.log(foo[0], bar[0]); // 9, 9
// foo์ bar๊ฐ ๋ชจ๋ ๊ฐ์ ๋ฐฐ์ด์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์,
// ํ๋๋ฅผ ์์ ํ๋ฉด ๋ค๋ฅธ ๋ณ์์์๋ ๋ณ๊ฒฝ์ด ๋ฐ์๋๋ค.