๊น์ ๋ณต์ฌ (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 ๊น์ง๋ง)
depth๋ ๊ฐ์ฒด์ ์ฐจ์์ ์๋ฏธํฉ๋๋ค. ๋ค์ฐจ์ ๊ฐ์ฒด์์๋
spread operator์ Object.assign() ๋ชจ๋ ์์ ํ Deep copy๊ฐ ๋์ง ๋ชปํฉ๋๋ค.
1 depth : Deep copy
2+ depth : Shallow copy
'FE > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] let, const ๋ด๋ถ๊ฐ ๋ณ๊ฒฝ์ ๋ํ์ฌ (0) | 2023.10.10 |
---|---|
[JavaScript] ์์์ ๋ด๋ฆผ, ์ฌ๋ฆผ, ๋ฐ์ฌ๋ฆผ (0) | 2023.10.07 |
Uploaded by Notion2Tistory v1.1.0