Skip to content

01. Types (ํ˜•) โ€‹

๊ฐ’์˜ ํŠน์„ฑ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋™์ž‘์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์Šต๊ด€์ด ์ค‘์š”ํ•˜๋‹ค.

๐Ÿงฉ Note

Airbnb ๊ฐ€์ด๋“œ๊ฐ€ ๋งํ•˜๋Š” Type ๊ตฌ๋ถ„์€ ๋‹จ์ˆœ ๋ถ„๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ณต์‚ฌ vs ์ฐธ์กฐ ๋™์ž‘์„ ์ดํ•ดํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋‹ค. ์ฆ‰, ๊ฐ’์ด ๋ณต์‚ฌ๋˜๋Š”๊ฐ€?, ์ฐธ์กฐ๊ฐ€ ๊ณต์œ ๋˜๋Š”๊ฐ€?๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฒ„๊ทธ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • React, Redux, Zustand ๊ฐ™์€ ์ƒํƒœ ๊ด€๋ฆฌ์—์„œ๋„ ๋ถˆ๋ณ€์„ฑ(immutability) ๊ฐœ๋…์€ ์—ฌ๊ธฐ์„œ ๋น„๋กฏ๋œ๋‹ค.
  • ์›์‹œํ˜•์€ ์ƒˆ ๊ฐ’์„ ๋ฐ”๋กœ ๋ณต์‚ฌํ•˜์ง€๋งŒ, ์ฐธ์กฐํ˜•์€ ์–•์€ ๋ณต์‚ฌ(shallow copy)๋งŒ์œผ๋กœ๋Š” ์™„์ „ํ•œ ๋…๋ฆฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋”ฐ๋ผ์„œ spread ์—ฐ์‚ฐ์ž({ ...obj }, [...arr])๋‚˜ structuredClone() ๊ฐ™์€ ๋„๊ตฌ๋กœ ์•ˆ์ „ํ•œ ๋ณต์ œ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

1. Primitive Types (์›์‹œํ˜•) โ€‹

์›์‹œํ˜•์— ์ ‘๊ทผํ•˜๋ฉด ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์กฐ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
์ฆ‰, ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด๋„ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•œ๋‹ค.

  • string
  • number
  • boolean
  • null
  • undefined
  • symbol
  • bigint
js
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
js
const foo = [1, 2];
const bar = foo;

bar[0] = 9;
console.log(foo[0], bar[0]); // 9, 9

// foo์™€ bar๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
// ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์—์„œ๋„ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜๋œ๋‹ค.