๋‹ฌ๋ฆฌ๊ธฐ๋ฐ˜ ๐Ÿƒ | ์ฐธ์กฐํ˜• ํƒ€์ž…์— ์กฐ์˜ค๊ธˆ ์ถ”๊ฐ€ํ•˜๊ธฐ

ํ•˜์˜ยท2024๋…„ 7์›” 26์ผ
0

etc.

๋ชฉ๋ก ๋ณด๊ธฐ
7/26

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

์ €๋ฒˆ์— ์ •๋ฆฌํ•œ ๋‚ด์šฉ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ์šฉ์–ด๋“ค๋„ ์žˆ๊ณ  ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์งง๊ฒŒ ์ ์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

๋๋‚˜์ง€ ์•Š๋Š”... ์ฐธ์กฐํ˜• ํƒ€์ž…(์–•์€๋ณต์‚ฌ, ๊นŠ์€๋ณต์‚ฌ)

์ฐธ์กฐํ˜•ํƒ€์ž…์—๋Š” ๋ญ๊ฐ€ ์žˆ์—ˆ๋ƒ! ๋ฐ”๋กœ ๊ฐ์ฒด, ๋ฐฐ์—ด, ํ•จ์ˆ˜ ๋“ฑ์ด ์žˆ๋‹ค.
์ด๋ฆ„์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ง์ ‘ ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ’์ด ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ '์ฃผ์†Œ'๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์ฐธ์กฐํ•ด์„œ ๊ฐ’์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค๋ฉด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์— 2๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ ์ด ์ด๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์Šคํƒํž™
์›์‹œ ๊ฐ’ ๋ฐ ์ฐธ์กฐ๊ฐ์ฒด ๋ฐ ํ•จ์ˆ˜
์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ ์•Œ ์ˆ˜ ์žˆ์Œ๋Ÿฐํƒ€์ž„์— ํฌ๊ธฐ ์•Œ ์ˆ˜ ์žˆ์Œ
๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ฐ์ฒด ๋‹น ์ œํ•œ ์—†์Œ

โญ๏ธ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ๋Š” ๊ฐ’์„ ์ง์ ‘ ๊ฐ€์ง€์ง€ ์•Š๊ณ , ํ•ด๋‹น ๊ฐ’์ด ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๋Š”๊ฑฐ!!!
์˜ค๋Š˜์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •๋ฆฌํ•˜๊ธฐ!!

๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด๋ฅผ ์–•์€๋ณต์‚ฌ์™€ ๊นŠ์€๋ณต์‚ฌ๋กœ ๋ณต์‚ฌํ•˜๊ธฐ

์–•์€๋ณต์‚ฌ(Shallow Copy) : ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ณต์‚ฌํ•˜๋ฉฐ, ์›๋ณธ ๋ฐฐ์—ด,๊ฐ์ฒด์™€ ๋™์ผํ•œ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.

  • ๋ฐฐ์—ด์—์„œ์˜ ์–•์€๋ณต์‚ฌ
let original = ['Apple', 'Banana', 'Cherry'];
let shallowCopy = original;

shallowCopy[1] = 'Blueberry';
console.log(original); // ['Apple', 'Blueberry', 'Cherry']
console.log(shallowCopy); // ['Apple', 'Blueberry', 'Cherry']
  • ๊ฐ์ฒด์—์„œ์˜ ์–•์€๋ณต์‚ฌ
let original = {
    name: 'John',
    age: 30
};
let shallowCopy = original;

shallowCopy.age = 31;
console.log(original); // { name: 'John', age: 31 }
console.log(shallowCopy); // { name: 'John', age: 31 }

๊นŠ์€๋ณต์‚ฌ(Deep Copy) : ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋ณต์‚ฌํ•˜์—ฌ ์›๋ณธ ๋ฐฐ์—ด๊ณผ ๋ณต์‚ฌ๋œ ๋ฐฐ์—ด์ด ์„œ๋กœ '๋‹ค๋ฅธ' ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•ด๋„ ๋‹ค๋ฅธ ๋ฐฐ์—ด์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค!

  • ๋ฐฐ์—ด์—์„œ์˜ ๊นŠ์€๋ณต์‚ฌ
function deepCopy(o) {
  var result = {};
  if (typeof o === "object" && o !== null)
    for (i in o) result[i] = deepCopy(o[i]);
  else result = o;
  return result;
}

const obj1 = {
  a: 1,
  b: [1, 2, 3]
};

var obj2 = deepCopy(obj1);

console.log(obj1 === obj2);
console.log(obj1);
console.log(obj2);
  • ๊ฐ์ฒด์—์„œ์˜ ๊นŠ์€๋ณต์‚ฌ
let original = {
    name: 'John',
    age: 30
};
let deepCopy = JSON.parse(JSON.stringify(original));

deepCopy.age = 31;
console.log(original); // { name: 'John', age: 30 }
console.log(deepCopy); // { name: 'John', age: 31 }

์ค‘์ฒฉ๋œ ์ฐธ์กฐํ˜• ํƒ€์ž…์˜ ๋ณต์‚ฌ ๋ฌธ์ œ

์—ฌ๋Ÿฌ ์ฐธ์กฐํ˜• ํƒ€์ž…์ด ์ค‘์ฒฉ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ
์–•์€ ๋ณต์‚ฌ๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ฐธ์กฐ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์–ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ ๋ฐ ์ˆ˜์ •ํ•  ๋•Œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ์ฒด ์•ˆ์˜ ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ์ฒด

let original = {
    name: 'Alice',
    friends: [
        { name: 'Bob' },
        { name: 'Charlie' }
    ]
};

let shallowCopy = { ...original };

shallowCopy.friends[0].name = 'Bobby';

console.log(original.friends[0].name); // 'Bobby'
console.log(shallowCopy.friends[0].name); // 'Bobby'

์–•์€ ๋ณต์‚ฌ๋Š” ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ์˜ ์†์„ฑ๋งŒ ๋ณต์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์•ˆ์˜ ๊ฐ์ฒด(์ค‘์ฒฉ๋œ ๊ฐ์ฒด)๋‚˜ ๋ฐฐ์—ด์˜ ์ฐธ์กฐ๋ฅผ '๊ทธ๋Œ€๋กœ' ๋ณต์‚ฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฒˆ๊ฑฐ๋กญ๋”๋ผ๋„ ๊นŠ์€๋ณต์‚ฌ๋ฅผ ํ•ด์•ผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.


์ฐธ์กฐํ˜•ํƒ€์ž…์ด ์–ด๋ ต์ง€๋งŒ ์ด๋Ÿฐ ์›๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ด์•ผ ์‹ค์ˆ˜๋ฅผ ๋ฒ”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ณ  map,filter ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž์œ ์ž์žฌ๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ง€๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•œ๋ฒˆ์— ์ดํ•ด๋˜์ง€ ์•Š๋Š” ์–ด๋ ค์šด ๊ฐœ๋…์ด๋‹ˆ๊นŒ ์ •๋ฆฌ๋œ ๊ฐ•์˜์ž๋ฃŒ๋ž‘ ์˜์ƒ๋“ค ๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์ง€๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜์ž!

profile
์™•์ชผ๋žฉ ํƒˆ์ถœ ๋ชฉํ‘œ์ž์˜ ์ฝ”๋”ฉ ๊ณต๋ถ€๊ธฐ๋ก

0๊ฐœ์˜ ๋Œ“๊ธ€