โœจJSY
๐Ÿ’ก
์–•์€ ๋ณต์‚ฌ(Shallow Copy) ์™€ ๊นŠ์€ ๋ณต์‚ฌ(Deep Copy)๋ž€ ๋ฌด์—‡์ธ์ง€? ๋‘ ๋ณต์‚ฌ์˜ ๋‹ค๋ฅธ ์ ๊ณผ ๋ณต์‚ฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊นŠ์€ ๋ณต์‚ฌ (Deep Copy)

let a = 1000; 
let b = a;  
b = 2000;  
console.log(a, b); // 1000 2000

๋ณ€์ˆ˜ b ๋Š” a ์˜ ๊ฐ’์„ ์ฐธ์กฐํ–ˆ์ง€๋งŒ, ๋‘ ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋ณ€์ˆ˜ a์˜ ๊ฐ’์€ ์—ฌ์ „ํžˆ 1000์ž…๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ

๋ณ€์ˆ˜์˜ “๊ฐ’”

๋งŒ์„ ์ฐธ์กฐํ•˜๋Š” ๋ณต์‚ฌ๋ฅผ ๊นŠ์€ ๋ณต์‚ฌ(Deep copy)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์–•์€ ๋ณต์‚ฌ (Shallow Copy)

let existedNums = [100, 200, 300, 400]; 
let newNums = existedNums;  
newNums[0] = 1; 
console.log(existedNums, newNums); // [1, 200, 300, 400] [1, 200, 300, 400]

newNums๋Š” existedNums ์˜ ๊ฐ’์„ ์ฐธ์กฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ

์‚ฌ์‹ค existedNums ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ด์˜จ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฐฐ์—ด์€ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ

“๊ฐ™์€ ์ฃผ์†Œ”๋ฅผ ์ฐธ์กฐ

ํ•˜๋Š” ๋ณต์‚ฌ๋ฅผ ์–•์€ ๋ณต์‚ฌ(Shallow copy)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด๋Š” ์œ„์™€ ๊ฐ™์ด ์–•์€ ๋ณต์‚ฌ๊ฐ€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก
์–•์€ ๋ณต์‚ฌ๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์–ด ์˜๋„์น˜ ์•Š์€ ๋™์ž‘์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ฐ์ฒด์—์„œ ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Spread Operator(…) ์—ฐ์‚ฐ์ž ์ด์šฉํ•˜๊ธฐ
let existedNums = [100, 200, 300, 400]; 
let newNums = [...existedNums];  
newNums[0] = 1; 
console.log(existedNums, newNums);   // [ 100, 200, 300, 400 ] [ 1, 200, 300, 400 ]

๋‹ฌ๋ผ์ง„ ์ ์€ ๋ณต์‚ฌํ•  ๋•Œ spread operator๋ฅผ ์ด์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

spread operator๋ฅผ ์ด์šฉํ•˜๋ฉด, ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (1 depth ๊นŒ์ง€๋งŒ)

 

Object.assign() ๋ฉ”์†Œ๋“œ ์ด์šฉํ•˜๊ธฐ
let existedNums = [100, 200, 300, 400]; 
let newNums = Object.assign([], existedNums);  
newNums[0] = 1; 
console.log(existedNums, newNums);   // [ 100, 200, 300, 400 ] [ 1, 200, 300, 400 ]

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (1 depth ๊นŒ์ง€๋งŒ)

 

 

๐Ÿ’ก
“1 depth ๊นŒ์ง€๋งŒ” ์ด๋ผ๋Š” ๊ฒŒ ๋ฌด์Šจ ๋œป์ธ๊ฐ€์š”?

 

depth๋Š” ๊ฐ์ฒด์˜ ์ฐจ์›์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ฐจ์› ๊ฐ์ฒด์—์„œ๋Š”

spread operator์™€ Object.assign() ๋ชจ๋‘ ์™„์ „ํ•œ Deep copy๊ฐ€ ๋˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

 

1 depth : Deep copy

2+ depth : Shallow copy

profile

โœจJSY

@JUNSANG YOO

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!

๊ฒ€์ƒ‰ ํƒœ๊ทธ