์๋ฐ์คํฌ๋ฆฝํธ ๋ฌ๋ฆฌ๊ธฐ๋ฐ์ ๋ค์ด๊ฐ์ ๊ผด์ฐ๋ฅผ ํ๊ณ ์๋ ๊ฒ ๊ฐ์..ใ
ใ
์ด๋ก 2๋ฒ์งธ ์๊ฐ์๋ ๊ณ์ ์ด๋ ค์ํ๋ ์ฐธ์กฐํ ํ์
, ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ์ ๋ํด ๋ณด์ถฉ ์์
์ ๋ค์๋ค.
์ ๋ฒ์ ์ ๋ฆฌํ ๋ด์ฉ๊ณผ ๋น์ทํ์ง๋ง ์๋ก์ด ์ฉ์ด๋ค๋ ์๊ณ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ฅผ ๋ค์ ์ ๋ฆฌํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์งง๊ฒ ์ ์ด๋ณด๋ ค๊ณ ํ๋ค.
๋๋์ง ์๋... ์ฐธ์กฐํ ํ์ (์์๋ณต์ฌ, ๊น์๋ณต์ฌ)
์ฐธ์กฐํํ์
์๋ ๋ญ๊ฐ ์์๋! ๋ฐ๋ก ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์ ๋ฑ์ด ์๋ค.
์ด๋ฆ์์๋ ์ ์ ์๋ฏ์ด ์ง์ ๊ฐ์ ๊ฐ์ง์ง ์์ผ๋ฉฐ, ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ '์ฃผ์'๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ฐธ์กฐํด์ ๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ฐธ์กฐํ ๋ณ์๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค๋ฉด ๋ค๋ฅธ ๋ณ์์๋ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
์ด๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์์ญ์ 2๊ฐ์ง๊ฐ ์กด์ฌํ๋๋ฐ ์ด ์ด๋ฆ์ ์ ์ ์์๋ค.
์คํ | ํ |
---|---|
์์ ๊ฐ ๋ฐ ์ฐธ์กฐ | ๊ฐ์ฒด ๋ฐ ํจ์ |
์ปดํ์ผ ํ์์ ํฌ๊ธฐ ์ ์ ์์ | ๋ฐํ์์ ํฌ๊ธฐ ์ ์ ์์ |
๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น | ๊ฐ์ฒด ๋น ์ ํ ์์ |
โญ๏ธ ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ ๊ฐ์ ์ง์ ๊ฐ์ง์ง ์๊ณ , ํด๋น ๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋๊ฑฐ!!!
์ค๋์ ๋ง์ง๋ง์ผ๋ก ์ ๋ฆฌํ๊ธฐ!!
์์๋ณต์ฌ(Shallow Copy)
: ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํ๋ฉฐ, ์๋ณธ ๋ฐฐ์ด,๊ฐ์ฒด์ ๋์ผํ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ์๋ก ์ํฅ์ ๋ฏธ์น๋ค.
let original = ['Apple', 'Banana', 'Cherry'];
let shallowCopy = original;
shallowCopy[1] = 'Blueberry';
console.log(original); // ['Apple', 'Blueberry', 'Cherry']
console.log(shallowCopy); // ['Apple', 'Blueberry', 'Cherry']
let original = {
name: 'John',
age: 30
};
let shallowCopy = original;
shallowCopy.age = 31;
console.log(original); // { name: 'John', age: 31 }
console.log(shallowCopy); // { name: 'John', age: 31 }
๊น์๋ณต์ฌ(Deep Copy)
: ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด ๋ชจ๋ ์์๋ฅผ ์๋ก์ด ๋ฐฐ์ด์ ๋ณต์ฌํ์ฌ ์๋ณธ ๋ฐฐ์ด๊ณผ ๋ณต์ฌ๋ ๋ฐฐ์ด์ด ์๋ก '๋ค๋ฅธ' ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ฒ ๋ง๋ ๋ค. ๋ฐ๋ผ์ ํ ๋ฐฐ์ด์ ์์ ํด๋ ๋ค๋ฅธ ๋ฐฐ์ด์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค!
function deepCopy(o) {
var result = {};
if (typeof o === "object" && o !== null)
for (i in o) result[i] = deepCopy(o[i]);
else result = o;
return result;
}
const obj1 = {
a: 1,
b: [1, 2, 3]
};
var obj2 = deepCopy(obj1);
console.log(obj1 === obj2);
console.log(obj1);
console.log(obj2);
let original = {
name: 'John',
age: 30
};
let deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.age = 31;
console.log(original); // { name: 'John', age: 30 }
console.log(deepCopy); // { name: 'John', age: 31 }
์ฌ๋ฌ ์ฐธ์กฐํ ํ์
์ด ์ค์ฒฉ๋์ด์๋ ๊ฒฝ์ฐ
์์ ๋ณต์ฌ๋ ์์์น ๋ชปํ ์ฐธ์กฐ๋ฅผ ๋จ๊ธธ ์ ์์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ ๋ฐ ์์ ํ ๋ ์ํฅ์ ๋ฏธ์น๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
let original = {
name: 'Alice',
friends: [
{ name: 'Bob' },
{ name: 'Charlie' }
]
};
let shallowCopy = { ...original };
shallowCopy.friends[0].name = 'Bobby';
console.log(original.friends[0].name); // 'Bobby'
console.log(shallowCopy.friends[0].name); // 'Bobby'
์์ ๋ณต์ฌ๋ ์ต์์ ๋ ๋ฒจ์ ์์ฑ๋ง ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ์์ ๊ฐ์ฒด(์ค์ฒฉ๋ ๊ฐ์ฒด)๋ ๋ฐฐ์ด์ ์ฐธ์กฐ๋ฅผ '๊ทธ๋๋ก' ๋ณต์ฌํ๋ค. ๋ฐ๋ผ์ ๋ฒ๊ฑฐ๋กญ๋๋ผ๋ ๊น์๋ณต์ฌ๋ฅผ ํด์ผ ์์ ํ๊ฒ ๋ณต์ฌํ์ฌ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
์ฐธ์กฐํํ์
์ด ์ด๋ ต์ง๋ง ์ด๋ฐ ์๋ฆฌ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌ๋๋ค๋ ๊ฒ์ ์ดํดํด์ผ ์ค์๋ฅผ ๋ฒํ์ง ์์ ์ ์๊ณ map,filter ๊ฐ์ ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ์์ ์์ฌ๋ก ์ํ๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ง๊ณ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค.
ํ๋ฒ์ ์ดํด๋์ง ์๋ ์ด๋ ค์ด ๊ฐ๋
์ด๋๊น ์ ๋ฆฌ๋ ๊ฐ์์๋ฃ๋ ์์๋ค ๋ณด๋ฉด์ ์ต์ํด์ง๊ณ ์ดํดํ ์ ์๋๋ก ๋
ธ๋ ฅํ์!