728x90
JavaScript Shallow Copy์ Deep Copy: ๊ฐ๋ , ํ์ฉ, ์ฅ๋จ์
1. Shallow Copy์ Deep Copy๋?
์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ณต์ฌํ ๋, Shallow Copy์ Deep Copy๋ ๋ ๊ฐ์ง ์ฃผ์ํ ๋ฐฉ๋ฒ์ ๋๋ค.
- Shallow Copy(์์ ๋ณต์ฌ): ๊ธฐ์กด ๊ฐ์ฒด์ ๋ ํผ๋ฐ์ค๋ฅผ ๋ณต์ฌํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ๋ด๋ถ ๊ฐ์ฒด๋ ๊ฐ์ ๋ ํผ๋ฐ์ค๋ฅผ ๊ณต์ ํฉ๋๋ค.
- Deep Copy(๊น์ ๋ณต์ฌ): ๊ฐ์ฒด์ ๋ชจ๋ ๋ ๋ฒจ์ ๋ํด ์์ ํ ๋ณต์ฌ๋ฅผ ์ํํฉ๋๋ค. ์๋ก์ด ๊ฐ์ฒด๋ ๊ธฐ์กด ๊ฐ์ฒด์ ์์ ํ ๋ ๋ฆฝ์ ์ ๋๋ค.
2. Shallow Copy์ Deep Copy์ ์ญํ
- Shallow Copy: ๊ฐ์ฒด์ ์ผ๋ถ๋ถ๋ง ์์ ํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ฉฐ, ๋ณต์ฌ๊ฐ ๋น ๋ฆ ๋๋ค. ๊ทธ๋ฌ๋ ๋ด๋ถ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ๊ณต์ ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- Deep Copy: ์์ ํ ๋ ๋ฆฝ์ฑ์ ์ ๊ณตํ์ฌ ๋ด๋ถ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ด ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ํ์ง๋ง ๋ณต์ฌ ๊ณผ์ ์ด ๋ณต์กํ๊ณ ์ฑ๋ฅ ์ ํ์ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
3. ์ด๋ ์ํฉ์ Shallow Copy์ Deep Copy๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
- Shallow Copy: ๋ด๋ถ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ด ๋ฌด์๋ ์ ์๋ ๊ฒฝ์ฐ, ๋ณต์ฌ ์๋๊ฐ ์ค์ํ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ํํด์ผ ํ๋ ๊ฒฝ์ฐ.
- Deep Copy: ๋ด๋ถ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ์ผ ํ๋ ๊ฒฝ์ฐ, ๋ณต์ฌ ์๋๊ฐ ๋๋ ค๋ ์๊ด์๋ ๊ฒฝ์ฐ, ์์ ํ ๊ฐ์ฒด ๋ ๋ฆฝ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ.
4. Shallow Copy์ Deep Copy์ ์ฅ๋จ์
Shallow Copy์ ์ฅ๋จ์ :
์ฅ์ :
- ๋ณต์ฌ ์๋: ๋ ํผ๋ฐ์ค๋ง์ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฆ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ฎ์ต๋๋ค.
๋จ์ :
- ๋ด๋ถ ๊ฐ์ฒด ๊ณต์ : ๋ด๋ถ ๊ฐ์ฒด๋ ์ฌ์ ํ ๋ ํผ๋ฐ์ค๋ฅผ ๊ณต์ ํ๋ฏ๋ก ๋ณ๊ฒฝ์ด ๋ฐ์๋ ์ ์์ต๋๋ค.
Deep Copy์ ์ฅ๋จ์ :
์ฅ์ :
- ์์ ํ ๋ ๋ฆฝ์ฑ: ๋ด๋ถ ๊ฐ์ฒด์ ์์ ํ ๋ ๋ฆฝ์ ์ด๋ฏ๋ก ๋ณ๊ฒฝ์ด ๋ฐ์๋์ง ์์ต๋๋ค.
๋จ์ :
- ๋ณต์ฌ ์๋: ๋ณต์ฌํ๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: Shallow Copy์ ๋นํด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
5. Shallow Copy์ Deep Copy๋ฅผ ์ดํดํ ์ ์๋ ์์ ์ฝ๋
Shallow Copy ์์
const originalArray = [1, 2, { a: 3 }];
const shallowCopyArray = [...originalArray];
shallowCopyArray[2].a = 99;
console.log(originalArray); // [1, 2, { a: 99 }]
Deep Copy ์์
const originalObject = { x: 1, y: { z: 2 } };
const deepCopyObject = JSON.parse(JSON.stringify(originalObject));
deepCopyObject.y.z = 99;
console.log(originalObject); // { x: 1, y: { z: 2 } }
6. ์ฐ๊ด๋ ๊ธฐ์
- Immutable.js: ๊ฐ์ฒด์ ๋ถ๋ณ์ฑ์ ์ ์งํ๋ฉด์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- Lodash: ๋ค์ํ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ ๊ณตํ๋ฉฐ,
_.cloneDeep
ํจ์๋ฅผ ํตํด ๊น์ ๋ณต์ฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
Shallow Copy์ Deep Copy๋ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด ๋ณต์ฌ ์ ์ ํํด์ผ ํ๋ ์ค์ํ ๊ฐ๋ ์ ๋๋ค. ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ํํ์ฌ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์งํ ์ ์์ต๋๋ค.
๋๊ธ