์ผ๋จ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์๋ฃํ์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
์์ ์๋ฃํ
Number, String, Boolean, null, undefined ๋ฑ... ๊ฐ์ฒด๋ ์๋๊ณ method๋ ๊ฐ์ง์ง ์๋ ํ์
๋ณ์์ ์์๊ฐ์ ์ ์ฅํ๋ฉด ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ค์ ๋ฐ์ดํฐ ๊ฐ์ด ์ ์ฅ๋๋ฉฐ, ํ ๋นํ ๋ณ์๋ฅผ ์กฐ์ํ๋ฉด ์ค์ ๋ฐ์ดํฐ ๊ฐ์ด ์กฐ์๋๋ค.
์ฐธ์กฐ ์๋ฃํ
๋ฐฐ์ด, ๊ฐ์ฒด, ํจ์ ๋ฑ...
๋ณ์์ ์ฐธ์กฐ ์๋ฃํ์ ์ ์ฅํ๋ฉด ๋ณ์์ ๊ฐ์ด ์๋ ์ฃผ์(๊ฐ์ฒด ์ฐธ์กฐ, ์์น ๊ฐ)๋ฅผ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ(heap)์ ์ ์ฅํ๊ณ ,
๊ทธ ๊ณต๊ฐ์ ์ฐธ์กฐํ๊ธฐ ์ํด ์ฃผ์๊ฐ์ ๋ณ์์ ํ ๋นํ๋ ๊ฒ์ด๋ค.
์ฆ ์ฐธ์กฐ ์๋ฃํ์ ํ ๋น๋ ๋ณ์๋ฅผ ์กฐ์ํ๋ ๊ฒ์ ์ฌ์ค ๊ฐ์ฒด ์์ฒด๋ฅผ ์กฐ์ํ๋ ๊ฒ์ด ์๋, ํด๋น ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ์กฐ์ํจ
=> ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ ์์ฑ์ด ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ์ํ๊ฒ ๋จ
๊ทธ๋ฆฌ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ณต์ฌํด์ผ ํ ๋๊ฐ ์๋ค.
๋ณต์ฌ๋ฅผ ํ๋ ์ด์ ์๋ ๋ํ์ ์ผ๋ก ๋ค์ ์ธ ๊ฐ์ง๊ฐ ์๋ค.
1. ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด
: ์ง์ ์์ ํ๋ฉด ์๋ณธ์ด ๋ฐ๋์ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด์ ์๋ณธ ๋ฐ์ดํฐ์ ์ํฅ์ ์ฃผ์ง ์๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
2. ์ํ ๊ด๋ฆฌ ์ ๋ถ๋ณ์ฑ ๋ณด์ฅ (์ด ๋ถ๋ถ์ ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค. ๋ฆฌ์กํธ ์์ ์ ๋ฃ๊ฒ ๋๋ฉด ์ดํดํ ์ ์์๋ฏ...)
: React, Redux ๋ฑ์์๋ ์ํ๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉด ์๋๋ค. ๋๋ฌธ์ ๋ณต์ฌ -> ์๋ก์ด ๋ณต์ฌ๋ณธ์์ ์์ -> ์๋ก์ด ์ํ๋ก ๊ต์ฒดํ๋ ์์ผ๋ก ๋ณ๊ฒฝํ๋ค.
3. ํจ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๊ธฐ ์ํด
: ํจ์๊ฐ ์ธ์๋ก ๋ฐ์ ๊ฐ์ฒด๋ฅผ ๋ด๋ถ์์ ์์ ํ ์๋ ์๊ธฐ ๋๋ฌธ์, ๋ณต์ฌ๋ณธ์ ๋๊ธฐ๋ฉด ํจ์ ๋ด์์ ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ์๋๋ผ๋ ์๋ณธ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๋ณต์ฌ ๋ฐฉ์์๋ ๊น์ ๋ณต์ฌ(Deep copy), ์์ ๋ณต์ฌ(Shallow copy)๊ฐ ์๋ค.
* ์์ ๋ณต์ฌ
1์ฐจ์๊น์ง๋ ๋ณต์ฌ๊ฐ ๋๋ฉฐ, ์ค์ฒฉ๋ ์ฐธ์กฐ์๋ฃํ์ ๋ณต์ฌ๊ฐ ๋์ง ์๊ณ ๊ฐ์ ์ฃผ์๋ฅผ ๊ณต์ ํ๋ค.
- ๋ฐฐ์ด
- ...(spread ์ฐ์ฐ์) : 1์ฐจ ๊ตฌ์กฐ๋ง ๋ณต์ฌ
- slice() : ์์๊ฐ์ด๋ฉด ๋ณ๊ฐ ๋ณต์ฌ๋๊ณ , ์ฐธ์กฐ๊ฐ์ด๋ฉด ์ฃผ์๊ฐ ๋ณต์ฌ๋ผ ์๋ณธ๊ณผ ์ฐ๊ฒฐ๋จ (์ฆ 1์ฐจ์๋ง ๋ณต์ฌํจ)
- ๋ฐฐ์ด์ ์์๊ฐ ์์๊ฐ์ผ ๋ => ๊ฐ ์์ฒด๊ฐ ๋ณต์ฌ๋จ
- ๋ฐฐ์ด์ ์์๊ฐ ์ฐธ์กฐ๊ฐ์ผ ๋ => ์ฐธ์กฐ(์ฃผ์)๋ฅผ ๋ณต์ฌ
- (๋ณต์ฌ ์๋!!) ๋ฐฐ์ด์ ์๋ณธ์ ์์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋ : push, pop, shift, sort, unshift, splice ๋ฑ
๋ฐฐ์ด์ slice()๋ก ๋ณต์ฌํ์ ๋ ์์ ๐ฝ
// ----- ๋ฐฐ์ด์ ์์๊ฐ ์์๊ฐ์ผ ๋ -----
let arr1 = ['aibao', 'fubao']; // aibao, fubao
let arr2 = arr1.slice(); // aibao, fubao
arr2[1] = 'huibao';
console.log('arr1 : ' + arr1); // arr1 : aibao, fubao
console.log('arr2 : ' + arr2); // arr2 : aibao, huibao
// ----- ๋ฐฐ์ด์ ์์๊ฐ ์ฐธ์กฐ๊ฐ์ผ ๋
let arr1 = [{name: 'aibao'}, {name: 'fubao'}];
let arr2 = arr1.slice();
arr2[1].name = 'huibao';
console.log('arr1 : ', arr1);
console.log('arr2 : ', arr2);
- ๊ฐ์ฒด : ...(spread ์ฐ์ฐ์), Object.assign();
* ๊น์ ๋ณต์ฌ
๋ด๋ถ ์ฐธ์กฐ ๋ฐ์ดํฐ๊น์ง ์์ ํ ์๋ก ๋ณต์ฌํ์ฌ, ์์ ๋ณต์ฌ์ ๋ฌ๋ฆฌ ์๋ณธ๊ณผ ์์ ๋ ๋ฆฝ์ํจ๋ค. ์๋ณธ๊ณผ ๋ณต์ฌ๋ณธ์ ์์ ํ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ฒ ๋ผ ์ฐธ์กฐ๋ฅผ ๊ณต์ ํ์ง ์๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์๋ ์์ฒด์ ์ผ๋ก ๊น์ ๋ณต์ฌ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์์ด์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
1. JSON ๊ฐ์ฒด๋ฅผ ํ์ฉ
์ฑ๋ฅ์ ๊ฐ์ฅ ๋น ๋ฅด์ง๋ง ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ฉฐ, JSON ๋ฌธ์์ด๋ก ๋ณํ์ด ๊ฐ๋ฅํ ๊ฐ์ฒด๋ง ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๋ค. ์๋ ๊ฐ์ฒด(function)๋ undefined๋ก ์ฒ๋ฆฌ๊ฐ ๋๋ค.
const arr1 = [{ name: "aibao" }, { name: "fubao" }];
const arr2 = JSON.parse(JSON.stringify(arr1));
arr2[1].name = "huibao";
console.log("arr1 : ", arr1);
console.log("arr2 : ", arr2);
2. Lodash๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
Lodash์ clonedeep ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ๋จ์ ์ ์ฑ๋ฅ์ด ์ข ๋๋ฆฌ๋ฉฐ, ์ค์น๋ฅผ ํด์ผํ๋ค. ๋์ ํจ์๋ ๊น์ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๋ค.
3. structuredClone() ์ฌ์ฉ
๊ฐํธํ๋ฉฐ ๊ฐ๋ ์ฑ์ด ์ข์ง๋ง ํจ์๋ ๊น์ ๋ณต์ฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
const arr1 = [{ name: "aibao" }, { name: "fubao" }];
const arr2 = JSON.parse(JSON.stringify(arr1));
arr2[1].name = "huibao";
console.log("arr1 : ", arr1);
console.log("arr2 : ", arr2);
4. ์ฌ๊ทํจ์๋ฅผ ํตํด ๊ตฌํ
๋ณต์กํ๋ค....
์ฐธ๊ณ
https://developer.mozilla.org/ko/docs/Glossary/Shallow_copy
https://sung-98.tistory.com/111
https://puk0806.tistory.com/117
https://bbangson.tistory.com/78
'javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
javascript/chart.js๋ก ๊ทธ๋ํ ๋ง๋ค๊ธฐ (0) | 2025.03.19 |
---|---|
250313 to-do ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ (2) (0) | 2025.03.14 |
250313 to-do ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ (1) (1) | 2025.03.13 |
javascript/var๋ฅผ ๋์ด์ ์ฌ์ฉํ์ง ์๋ ์ด์ (2) | 2025.03.12 |
250307 ํ๋ก๊ทธ๋๋จธ์ค (0) | 2025.03.07 |