01. Types (ํ) โ
๊ฐ์ ํน์ฑ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ๋ ์ต๊ด์ด ์ค์ํ๋ค.
๐งฉ Note
Airbnb ๊ฐ์ด๋๊ฐ ๋งํ๋ Type ๊ตฌ๋ถ์ ๋จ์ ๋ถ๋ฅ๊ฐ ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ์ ๋ณต์ฌ vs ์ฐธ์กฐ ๋์์ ์ดํดํ๋ผ๋ ๋ฉ์์ง๋ค. ์ฆ, ๊ฐ์ด ๋ณต์ฌ๋๋๊ฐ?, ์ฐธ์กฐ๊ฐ ๊ณต์ ๋๋๊ฐ?๋ฅผ ๊ตฌ๋ถํ ์ ์์ด์ผ ์์์น ๋ชปํ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
- React, Redux, Zustand ๊ฐ์ ์ํ ๊ด๋ฆฌ์์๋ ๋ถ๋ณ์ฑ(immutability) ๊ฐ๋ ์ ์ฌ๊ธฐ์ ๋น๋กฏ๋๋ค.
- ์์ํ์ ์ ๊ฐ์ ๋ฐ๋ก ๋ณต์ฌํ์ง๋ง, ์ฐธ์กฐํ์ ์์ ๋ณต์ฌ(shallow copy)๋ง์ผ๋ก๋ ์์ ํ ๋ ๋ฆฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๋ฐ๋ผ์ spread ์ฐ์ฐ์
({ ...obj }, [...arr])๋structuredClone()๊ฐ์ ๋๊ตฌ๋ก ์์ ํ ๋ณต์ ๋ฅผ ์ํํด์ผ ํ๋ค.
๐งฉ Related Concepts
1. Primitive Types (์์ํ) โ
์์ํ์ ์ ๊ทผํ๋ฉด ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํ์ฌ ์กฐ์ํ๊ฒ ๋๋ค.
์ฆ, ์๋ก์ด ๋ณ์์ ๋์
ํด๋ ์๋ก ๋
๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ค.
stringnumberbooleannullundefinedsymbolbigint
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 (์ฐธ์กฐํ) โ
์ฐธ์กฐํ์ ์ ๊ทผํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(์ฐธ์กฐ)๋ฅผ ํตํด ๊ฐ์ ์ ๊ทผํ๋ค.
์ฆ, ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ๋ณ์๋ ์๋ก ์ํฅ์ ์ค๋ค.
objectarrayfunction
const foo = [1, 2];
const bar = foo;
bar[0] = 9;
console.log(foo[0], bar[0]); // 9, 9
// foo์ bar๊ฐ ๋ชจ๋ ๊ฐ์ ๋ฐฐ์ด์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์,
// ํ๋๋ฅผ ์์ ํ๋ฉด ๋ค๋ฅธ ๋ณ์์์๋ ๋ณ๊ฒฝ์ด ๋ฐ์๋๋ค.