minTech

[JavaScript] ์–•์€ ๋ณต์‚ฌ์™€ (Shallow Copy) ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy) ๋ณธ๋ฌธ

JavaScript

[JavaScript] ์–•์€ ๋ณต์‚ฌ์™€ (Shallow Copy) ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)

pushzzeong 2024. 1. 20. 17:01

๐Ÿ–๏ธ์‹œ์ž‘ ์ „

๋ฐ์ดํ„ฐ ํƒ€์ž…

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์—๋Š” ๊ธฐ๋ณธํ˜•(Primitive Type)๊ณผ ์ฐธ์กฐํ˜•(Reference Type)์ด ์žˆ๋‹ค. 

 

๊ธฐ๋ณธํ˜•(Primitive Type)

  • String, Number, Bigint, Boolean, undefined, symbol, null 
  • ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ์˜ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‚˜, ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
let value = "original";
value = "change";

 

  • ๊ธฐ๋ณธํ˜•์€ ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์—  ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์ด๋‹ค. 
  • ํ• ๋‹น ์—ฐ์‚ฐ์ž(=) ๋ฅผ ์ด์šฉ ๋ณ€์ˆ˜์— ๊ฐ’ ํ• ๋‹น ์‹œ, ์‹ค์ œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณต์‚ฌํ•œ ๊ฐ’์ด ์žฌํ• ๋‹น๋˜๋”๋ผ๋„ ์›๋ณธ์—๋Š” ์ „ํ˜€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. 
let value = "original";
let copy = value;

 

 

์ฐธ์กฐํ˜•(Reference Type)

  • ๊ธฐ๋ณธํ˜•์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฐ’์€ ์ฐธ์กฐํ˜•์ด๋‹ค. 
  • ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” ๊ฐ์ฒด, ํ•จ์ˆ˜, ๋ฐฐ์—ด ๋“ฑ์ด ์žˆ๋‹ค. 
  • ๋ณ€์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•œ๋‹ค. 

=> ๊ฐ์ฒด ๋ฐ์ดํ„ฐ ์ž์ฒด๋Š” ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ธ heap์— ์ €์žฅ๋˜๋ฉฐ, ๋ณ€์ˆ˜์— ํ• ๋‹น ์‹œ์—๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฃผ์†Œ ์ฆ‰, heap ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’์„ ์ด์šฉํ•ด ๋ณ€์ˆ˜์˜ ๊ฐ’์— ์ ‘๊ทผํ•œ๋‹ค. 

 

๐Ÿ‘‰ ์–•์€ ๋ณต์‚ฌ (Shallow Copy)

  • ์–•์€ ๋ณต์‚ฌ๋Š” ์‹ค์ œ ๊ฐ’์ด ์•„๋‹Œ ์ฃผ์†Œ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 
  • ์•„๋ž˜๋Š” ์–•์€ ๋ณต์‚ฌ์˜ ์˜ˆ์‹œ์ด๋‹ค.

fruitstprice์˜ ๋ฐฐ์—ด์„ copy์— ์–•์€ ๋ณต์‚ฌ๋ฅผ ํ•œ ํ›„์— copy์˜ ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค. 

let fruitsPrice = {
  apple : "1000",
  mango : "3000",
  orange : "5000",
  melon : "6000",
}

let copy = fruitsPrice;
copy.apple = "5000";
console.log(fruitsPrice);
console.log(copy);

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ, ์›๋ฐฐ์—ด์ธ fruitsPrice์˜ ๋ฐฐ์—ด์˜ ๊ฐ’๋„ ๋ณ€๊ฒฝ์ด ๋˜์—ˆ์Œ์„ ํ™•์ธํ•˜์˜€๋‹ค. 

 

์–•์€ ๋ณต์‚ฌ ์‹œ, ํ•ด๋‹น ๊ฐ’์˜ ์ฃผ์†Œ๋งŒ์„ ๋ณต์‚ฌํ•˜๊ณ , ํ•ด๋‹น ์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋™์ผํ•˜๋‹ค. 

๋”ฐ๋ผ์„œ ๋ณต์‚ฌํ•œ ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ธฐ์กด์˜ ๊ฐ์ฒด์˜ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

 

 

๐Ÿ‘‰ ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)

  • ๊นŠ์€ ๋ณต์‚ฌ๋ž€ ์‹ค์ œ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 
  • ์›์‹œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋Š” ํ• ๋‹น ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ๊ฐ’ ํ• ๋‹น ์‹œ์— ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. 
  • ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•  ์‹œ, ์›๋ณธ๊ณผ ์‚ฌ๋ณธ์€ ์„œ๋กœ ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–•์€ ๋ณต์‚ฌ์™€ ๋‹ฌ๋ฆฌ ๊ฐ’ ๋ณ€๊ฒฝ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
  • ์•„๋ž˜๋Š” ๊นŠ์€ ๋ณต์‚ฌ์˜ ์˜ˆ์‹œ์ด๋‹ค. 
let fruitsPrice = {
  apple : "1000",
  mango : "3000",
  orange : "5000",
  melon : "6000",
}

let copy = Object.assign({},fruitsPrice);
copy.apple = "5000";
console.log(fruitsPrice);
console.log(copy);

 

์ถœ๋ ฅ ๊ฒฐ๊ณผ, ์–•์€ ๋ณต์‚ฌ์™€ ๋‹ฌ๋ฆฌ copy์˜ ๊ฐ’๋งŒ ๋ณ€๊ฒฝ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค .

 

๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•  ๊ฒฝ์šฐ ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, copy๋Š” fruitsPrice์™€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์˜ ๊ฐ’์„ ๊ฐ€์ง„ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.