์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ๋ฐฑ์ค
- dynamic import
- React Query
- csr
- Sass
- Next.js
- Vite
- JavaScript
- html
- ์ฝ๋ฉํ ์คํธ
- SSR
- css
- ๊ณต๋ถ
- error
- React
- ์๋ฌ
- Git
- ์ทจ์
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ๋ฐ์
- TypeScript
- Browser
- ํ๋ก ํธ์๋
- ์ทจ์ ์ค๋น
- ์๋ฐ์คํฌ๋ฆฝํธ
- DOM
- ๋น๋๊ธฐ
- ์ฝ๋ฉ
- ์ฐจ์ด
- http
- Today
- Total
minTech
[JavaScript] ์์ ๋ณต์ฌ์ (Shallow Copy) ๊น์ ๋ณต์ฌ(Deep Copy) ๋ณธ๋ฌธ
[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์ ๊ฐ์ ๊ฐ์ ๊ฐ์ง ์๋ก์ด ๊ฐ์ฒด์ ๊ฐ์ ๊ฐ์ง ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] ์ด๋ฒคํธ ๋ฃจํ(Event Loop) (1) | 2024.01.22 |
---|---|
[Javascript] let, const, var (1) | 2024.01.21 |
[JavaScript] HTML ์์ฑ ๋ค๋ฃจ๊ธฐ (0) | 2024.01.18 |
[JavaScript] ์์ ๋ ธ๋ ์ถ๊ฐ/๋ณ๊ฒฝ/์ญ์ (0) | 2024.01.18 |
[JavaScript] ์ฃผ์ ๋ ธ๋(Node) ํ๋กํผํฐ(Property) (0) | 2024.01.17 |