๐Ÿ– ์™์™ ๋“ค์–ด์˜ค๋Š” ํ•จ์ˆ˜ํ˜• ์ฝ”๋”ฉ - ์‹ฌํ”Œํ•œ ์ฝ”๋“œ๋กœ ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ธธ๋“ค์ด๊ธฐ

์ด ๊ธ€์€ ์™์™ ๋“ค์–ด์˜ค๋Š” ํ•จ์ˆ˜ํ˜• ์ฝ”๋”ฉ - ์‹ฌํ”Œํ•œ ์ฝ”๋“œ๋กœ ๋ณต์žกํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ธธ๋“ค์ด๊ธฐ๋ฅผ ์ฝ๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜•๋„ ํ•จ์ˆ˜ํ˜•์ด์ง€๋งŒ, ์ด ์ฑ…์„ ํ†ตํ•ด ์ข€๋” ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ž€ ํŒ€์›๋“ค์˜ ์˜๊ฒฌ์„ ํ† ๋Œ€๋กœ ์ด๋ฒˆ ์Šคํ„ฐ๋”” ์„œ์ ์œผ๋กœ ์„ ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Chap 6. ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์–ธ์–ด์—์„œ ๋ถˆ๋ณ€์„ฑ ์œ ์ง€ํ•˜๊ธฐ(feat. JS)

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋„๋ก ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ ์ ์šฉํ•˜๊ธฐ
  • ๊นŠ์ด ์ค‘์ฒฉ๋œ ๋ฐ์ดํ„ฐ์—๋„ ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ ์ ์šฉํ•˜๊ธฐ
  • ๋ถˆ๋ณ€์„ฑ ์ดํ•ดํ•˜๊ธฐ

1) ๋™์ž‘์„ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ํ˜น์€ ๋‘˜ ๋‹ค๋กœ ๋ถ„๋ฅ˜ํ•˜๊ธฐ

  • ์ฝ๊ธฐ(Read): ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์ •๋ณด๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ
    • ์ธ์ž์—๋งŒ ์˜์กดํ•ด์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ๊ธฐ๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜ ์ฆ‰, ๊ณ„์‚ฐ์ด ๋œ๋‹ค.
  • ์“ฐ๊ธฐ(Write): ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ
    • ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋””์—์„œ ์‚ฌ์šฉ๋ ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๋ณ€์„ฑ ์›์น™(์นดํ”ผ-์˜จ-๋ผ์ดํŠธ)์ด ํ•„์š”ํ•˜๋‹ค.
  • ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋‘˜ ๋‹ค: ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พธ๋ฉด์„œ ์ •๋ณด๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ

2) ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ ์›์น™ ์„ธ ๋‹จ๊ณ„

  1. ๋ณต์‚ฌ๋ณธ ๋งŒ๋“ค๊ธฐ
  2. ๋ณต์‚ฌ๋ณธ ๋ณ€๊ฒฝํ•˜๊ธฐ
  3. ๋ณต์‚ฌ๋ณธ ๋ฐ˜ํ™˜ํ•˜๊ธฐ

2-1) ๋ฐฐ์—ด์˜ ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ

  • push() ์˜ˆ์‹œ
const getAddedArray = (array, value) => {
  const newArray = [...array];
  newArray.push(value);
  return newArray;
};

const array = [1, 2, 3];
const newArray = getAddedArray(array, 4); // [1, 2, 3, 4]

2-2) ๊ฐ์ฒด์˜ ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ

  • Object.assign() ์˜ˆ์‹œ
const getAddedObject = (object, value) => {
  const newObject = Object.assign({}, object);
  newObject.value = value;
  return newObject;
};

3) ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์€ ๊ณ„์‚ฐ์ด๋‹ค.

  • ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ => ์•ก์…˜
  • ์“ฐ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ ๋‹ค.
  • ์–ด๋–ค ๋ฐ์ดํ„ฐ์— ์“ฐ๊ธฐ๊ฐ€ ์—†๋‹ค๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ๋Š” ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ์ด๋‹ค.
  • ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ => ๊ณ„์‚ฐ
  • ์“ฐ๊ธฐ๋ฅผ ์ฝ๊ธฐ๋กœ ๋ฐ”๊พธ๋ฉด ์•ก์…˜์€ ์ค„๊ณ  ๊ณ„์‚ฐ์ด ๋งŽ์•„์ง„๋‹ค.

4) ๋ถˆ๋ณ€์„ฑ๋„ ์ข‹์ง€๋งŒ, ๋‹น์—ฐํžˆ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋Š” ํ•„์š”ํ•˜๋‹ค.

ex) ์žฅ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๋ฉด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.

5) ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ๋Š” ๋Š๋ฆฌ์ง€ ์•Š๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑด, ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋Š๋ฆฌ๋‹ค.

๋‹ค๋งŒ,

  • ๋Š๋ฆฐ ๋ถ€๋ถ„์€ ์–ธ์ œ๋“  ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ˜„๋Œ€ ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค.
  • ์šฐ๋ฆฌ์˜ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์ด ๋ณต์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ex) [1, 2, 3, โ€ฆ, 100]์ด๋ž€ ๋ฐฐ์—ด์„ ๋ณต์‚ฌ => 1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ์ˆซ์ž๋Š” ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹จ์ง€ ๋ฐฐ์—ด์˜ ์ฐธ์กฐ๋งŒ ๋ณต์‚ฌํ•œ๋‹ค.(100๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ณต์‚ฌํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์•„๋‹ˆ๋ผ๋Š” ์ด์•ผ๊ธฐ)

6) ์ •๋ฆฌ

  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ถˆ๋ณ€ ๋ฐ์ดํ„ฐ๋Š” ํ•„์š”ํ•˜๋‹ค.
  • ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ์— ์“ฐ๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์€ ๊ณ„์‚ฐ์ด ์•„๋‹ˆ๋ผ ์•ก์…˜์ด๋‹ค.
  • ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ: ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋ณ€ํ˜•์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์›์น™. ์ฆ‰, ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ  ๋ณต์‚ฌ๋ณธ์„ ๋ณ€๊ฒฝํ•œ ํ›„ ๋ณต์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ.

์ค‘์ฒฉ ๋ฐ์ดํ„ฐ(nested data): ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์— ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ
์–•์€ ๋ณต์‚ฌ(shallow copy): ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ์ฐธ์กฐ๋งŒ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ(์ตœ์ƒ์œ„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋งŒ ๋ณต์‚ฌํ•œ๋‹ค.)
๊ตฌ์กฐ์  ๊ณต์œ (structural sharing): ๋‘ ๊ฐœ์˜ ์ค‘์ฒฉ๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—์„œ ๊ทธ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ