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

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

Chap 7. ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋ฅผ ์“ฐ๋ฉด์„œ ๋ถˆ๋ณ€์„ฑ ์ง€ํ‚ค๊ธฐ

  • ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ํ˜น์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์–ด์  ๋ณต์‚ฌ
  • ์–•์€ ๋ณต์‚ฌ์™€ ๊นŠ์€ ๋ณต์‚ฌ์˜ ์ฐจ์ด
  • ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ์™€ ๋ฐฉ์–ด์  ๋ณต์‚ฌ ๊ตฌ๋ถ„

์šฐ๋ฆฌ๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ์™€ ์†Œํ†ตํ•  ๋•Œ, ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์•ž์—์„œ ๋ฐฐ์šด ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ๋Š” ์•ˆ์ „ํ•œ ์ฝ”๋“œ ๋‚ด์—์„œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ง์ ‘ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ๋ชปํ•œ ์ƒํ™ฉ๋“ค์ด ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜น์€ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•  ๋•Œ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚จ ์•ˆ์ „ํ•œ ์ฝ”๋“œ์—์„œ ๋ถˆ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๊ณ  ๊ฐˆ ๋•Œ, ์–ด๋–ป๊ฒŒ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ์„๊นŒ?

๊ทธ ํ•ด๋‹ต์ด ๋ฐฉ์–ด์  ๋ณต์‚ฌ์— ์žˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๊ฐ์ฒด์— ๋Œ€ํ•œ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ†ตํ•ด ๋ถˆ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋กœ ์ „๋‹ฌํ•  ๋•Œ๋„ ๋ณต์‚ฌ๋ฅผ ํ•ด์„œ ์ „๋‹ฌํ•˜๊ณ , ๋ถˆ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ๋„ ๋ณต์‚ฌ๋ฅผ ํ•ด์„œ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ์•„๋ž˜๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ด๋‹ค.

// ์—ฌ๊ธฐ์„œ push() ํ•จ์ˆ˜๋Š” ๊ธฐ์กด์˜ array๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.
function push(array, value) {
  array.push(value);
}

const nums = [1, 2, 3, 4, 5];
push(nums, 6); // ๊ธฐ์กด nums ๋ฐฐ์—ด์— 6์ด ์ถ”๊ฐ€๋œ๋‹ค. => ๋ถˆ๋ณ€์„ฑ์ด ๊นจ์ง„๋‹ค.

// ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ฅผ ํ†ตํ•ด ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋Š” ๋ฐฉ๋ฒ•
const numsCopy = deepCopy(nums);
push(numsCopy, 6); // ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด deepCopy๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
const newNums = deepCopy(numsCopy); // ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด deepCopy๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

// ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ฅผ ํ†ตํ•œ ๋ฐฉ๋ฒ•์„ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๊ธฐ
function pushSafe(array, value) {
  const copy = deepCopy(array);
  copy.push(value);
  return deepCopy(copy);
}

๊นŠ์€ ๋ณต์‚ฌ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

ํƒ€์ž…๊นŒ์ง€ ๊ณ ๋ คํ•˜๋ฉด ์™„๋ฒฝํ•˜์ง€ ์•Š์ง€๋งŒ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

const getDeepCopy = (target) => {
  if (target === null) return null;
  if (target === undefined) return undefined;
  if (Array.isArray(target)) return target.map((item) => getDeepCopy(item));
  if (typeof target === 'object') {
    const copy = {};
    for (const key in target) {
      copy[key] = getDeepCopy(target[key]);
    }
    return copy;
  }
  return target;

์นดํ”ผ-์˜จ-๋ผ์ดํŠธ์™€ ๋ฐฉ์–ด์  ๋ณต์‚ฌ ๋น„๊ตํ•ด๋ณด๊ธฐ

์นดํ”ผ-์˜จ-๋ผ์ดํŠธ

  • ์ฃผ๋กœ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ ์‚ฌ์šฉ
  • ์•ˆ์ „ํ•œ ์ฝ”๋“œ์—์„œ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์‚ฌ์‹ค ์นดํ”ผ-์˜จ-๋ผ์ดํŠธ๋ฅผ ํ†ตํ•ด ์•ˆ์ „ํ•œ ์ฝ”๋“œ๊ฐ€ ๋งŒ๋“ค์–ด ์ง„๋‹ค.
  • ์–•์€ ๋ณต์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋น„๊ต์  ๋น„์šฉ์ด ์ ๊ฒŒ ๋“ ๋‹ค.
1. ๋ฐ”๊ฟ€ ๋ฐ์ดํ„ฐ์˜ ์–•์€ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ ๋‹ค.
2. ๋ณต์‚ฌ๋ณธ์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
3. ๋ณต์‚ฌ๋ณธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฐฉ์–ด์  ๋ณต์‚ฌ

  • ์ฃผ๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ
  • ์•ˆ์ „ํ•œ ์ฝ”๋“œ์™€ ๋ถˆ์•ˆ์ „ํ•œ ์ฝ”๋“œ์˜ ๊ฒฝ๊ณ„์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋น„๊ต์  ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.
1. ์•ˆ์ „์ง€๋Œ€์—์„œ ๋‚˜๊ฐ€๋Š” ๋ฐ์ดํ„ฐ์— ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•ด์„œ ๋‚ด๋ณด๋‚ธ๋‹ค.
2. ์•ˆ์ „์ง€๋Œ€๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ์— ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•ด์„œ ๋“ค์—ฌ์˜จ๋‹ค.