๋ฐฐ์ด ๋ฉ์๋
๊ฐ์ฒด ๋ฉ์๋
// 1. Object.assign()
const originalObj = { name: 'John', age: 30 };
const shallowCopy1 = Object.assign({}, originalObj);
// 2. ์คํ๋ ๋ ์ฐ์ฐ์
const shallowCopy2 = { ...originalObj };
// 3. ๋ฐฐ์ด์ ๊ฒฝ์ฐ
const originalArray = [1, 2, { x: 1 }];
const shallowCopy3 = [...originalArray];
// 1. structuredClone() - 2022๋
๋์
const originalObj = {
name: 'John',
address: { city: 'Seoul', country: 'Korea' },
birth: new Date('1990-01-01'),
skills: new Set(['JavaScript', 'React'])
};
const deepCopy1 = structuredClone(originalObj);
// 2. JSON.parse + JSON.stringify
const deepCopy2 = JSON.parse(JSON.stringify(originalObj));
// 3. ์ฌ๊ท ํจ์ ์ฌ์ฉ
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') return obj;
const copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
copy[key] = deepCopy(obj[key]);
}
return copy;
}
// JSON ๋ฐฉ์์ ํ๊ณ ์์
const obj = {
func: () => console.log('Hello'),
symbol: Symbol('sym'),
undefined: undefined,
date: new Date(),
set: new Set([1, 2, 3])
};
const copied = JSON.parse(JSON.stringify(obj));
console.log(copied);
// ์ถ๋ ฅ:
// {
// date: "2024-01-08T00:00:00.000Z", // Date๊ฐ ๋ฌธ์์ด๋ก ๋ณํ
// set: {}, // Set์ด ๋น ๊ฐ์ฒด๋ก ๋ณํ
// // func, symbol, undefined๋ ์์ ํ ์ฌ๋ผ์ง
// }
// ์ฌ์ฉ์ ์ ๋ณด ์์ ์
const userInfo = { name: 'John', age: 30 };
const updatedInfo = { ...userInfo, age: 31 };
// ๋ฆฌ์กํธ ์ํ ์
๋ฐ์ดํธ
const [todos, setTodos] = useState([]);
const addTodo = (newTodo) => {
setTodos([...todos, newTodo]); // ์์ ๋ณต์ฌ๋ก ์ถฉ๋ถ
};
const companyData = {
name: 'Tech Corp',
departments: [{
name: 'Engineering',
employees: [{ name: 'John', projects: ['A', 'B'] }]
}]
};
// ์์ ํ ๋
๋ฆฝ ๋ณต์ฌ๋ณธ ํ์์
const backupData = deepCopy(companyData);
// ๊ฒ์ ์ํ ์ ์ฅ ์์คํ
const gameState = {
player: { position: {x: 0, y: 0}, inventory: ['sword'] },
world: { entities: [], weather: 'sunny' }
};
// ์ธ์ด๋ธ ํฌ์ธํธ ์์ฑ
const savePoint = deepCopy(gameState);
structuredClone()์ ์ฌ์ฉํ๊ณ , ๊ตฌ๋ฒ์ ๋ธ๋ผ์ฐ์ ์ง์์ด ํ์ํ๊ฑฐ๋ ๊ฐ๋จํ ๊ฐ์ฒด ๋ณต์ฌ์ ๊ฒฝ์ฐ JSON ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์จ์