2025. 8. 19. 13:44ใFront-end/JavaScript

๋ชฉ์ฐจ
1. ๊ฐ์ฒด์ ์ ์ฅ๊ณผ ๋ณต์ฌ
2. ๊ฐ์ฒด์ ๋น๊ต
3. ์์ ๋ณต์ฌ (Shallow Copy)
4. ๊น์ ๋ณต์ฌ (Deep Copy)
1. ๊ฐ์ฒด์ ์ ์ฅ๊ณผ ๋ณต์ฌ
์์ํ์ ๋ค์ '๊ฐ ์์ฒด'๊ฐ ๋ณ์์ ์ ์ฅ๋๋ ๋ฐ๋ฉด,
๊ฐ์ฒด๋ ๊ฐ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ ์ฅ๋๋ค.
let user = { name: "John" };
let admin = user;
admin.name = "Pete";
console.log(user.name); // "Pete"
user, admin ๋๋ค ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ค.
admin์ ๋ณต์ฌ๋ ๊ฐ์ด user์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ด๊ธฐ ๋๋ฌธ์ user, admin์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์ด๋ค.
2. ๊ฐ์ฒด์ ๋น๊ต
๊ฐ์ฒด ๋น๊ต ์ ๋๋ฑ ์ฐ์ฐ์(==)์ ์ผ์น ์ฐ์ฐ์(===)๋ ๋์ผํ๊ฒ ๋์ํ๋ค.
let a = {};
let b = a;
let c = {}
console.log(a == b); // true;
console.log(a === b); // true;
console.log(a == c); // false;
- a๋ฅผ ๋ณต์ฌํ b๋ a์ ์์ ํ ๋์ผํ๋ค.
- a์ c๋ ๋์ผํ ๋น ๊ฐ์ฒด์ด์ง๋ง ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง๋ ๋ ๋ฆฝ๋ ๊ฐ์ฒด์ด๋ฏ๋ก ๋น๊ตํ์ ๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋์จ๋ค.
3. ์์ ๋ณต์ฌ (Shallow Copy)
1. for... in ๋ฐ๋ณต๋ฌธ
for...in ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ณต์ ํ ์ ์๋ค.
ํ๋กํผํฐ๋ค์ ์ํํด์ ์์ ์์ค๊น์ง ๋ณต์ฌํ๋ ๊ฒ์ด๋ค.
let user = { name: "John", age: 30 };
let clone = {};
for (let key in user) {
clone[key] = user[key];
}
2. Object.assign()
Object.assign() ๋ฉ์๋๋ก ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ์ ์๋ค.
- ์ฒซ ๋ฒ์งธ ์ธ์ : ๋ชฉํ๋ก ํ๋ ๊ฐ์ฒด
- ๋ ๋ฒ์งธ ์ธ์๋ถํฐ : ๋ณต์ฌํ๊ณ ์ ํ๋ ๊ฐ์ฒด
๋ณต์ฌํ๊ณ ์ ํ๋ ๊ฐ์ฒด๋ค์ ํ๋กํผํฐ๋ค์ ๋ชฉํ ๊ฐ์ฒด์ ๋ณต์ฌํ๋ค.
let user = { name: "John" };
let clone = Object.assign({}, user);
์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ณํฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
let user = { name: "John" };
let permissions1 = { canView: true };
let permissions2 = { canEdit: true };
Object.assign(user, permissions1, permissions2);
// user = { name: "John", canView: true, canEdit: true }
- ๋ชฉํ ๊ฐ์ฒด์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ํ๋กํผํฐ๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ธฐ์กด ๊ฐ์ด ๋ฎ์ด์์์ง๋ค.
3. ์คํ๋ ๋ ๋ฌธ๋ฒ
์ ๊ฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ์คํ๋ ๋ ๋ฌธ๋ฒ์ผ๋ก ๊ฐ๋จํ๊ฒ ๋ณต์ฌํ ์ ์๋ค.
let user = { name: "John", age: 30 };
let clone = { ...user };
4. ๊ฐ์ฒด์ ๊น์ ๋ณต์ฌ
์๊น์ง๋ ์๋ณธ ๊ฐ์ฒด์ ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์์๊ฐ๋ง ์์๋ค.
ํ์ง๋ง ํ๋กํผํฐ๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ์ผ ์๋ ์๋ค. ์ด๋ด ๊ฒฝ์ฐ, ์์๊ฐ์ ๋ณต์ฌ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฐ์ฒด ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ ์ ์๋ค.
let user = {
name: "John",
sizes: {
height: 182,
width: 50
}
};
alert( user.sizes.height ); // 182
let clone = Object.assign({}, user);
alert(user.sizes === clone.sizes ); // true
user.sizes.width++;
alert(clone.sizes.width); // 51
์ด๋ ๊ฒ ์ค์ฒฉ๋ ๊ฐ์ฒด์ ๋ณต์ฌ๋ฅผ ํ ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผํ๋ค.
1. structuredClone()
structuredClone ํจ์๋ก ๊น์ ๋ณต์ฌ๋ฅผ ํ ์ ์๋ค.
let user = {
name: "John",
sizes: { height: 182, width: 50 }
};
// ํ์ค structuredClone API
let clone = structuredClone(user);
console.log(user.sizes === clone.sizes); // false (์์ ๋
๋ฆฝ)
2. Ladash
Lodash๋ฅผ ํ์ฉํ์ฌ ๊น์ ๋ณต์ฌ๋ฅผ ํ ์ ์๋ค.
const clone = _.cloneDeep(user);
์ฐธ๊ณ
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| B14 : ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) (1) | 2025.08.19 |
|---|---|
| B15 : ๊ฐ์ฒด to ์์ ํ์ ๋ณํ (0) | 2025.08.19 |
| B13 : ์ ๊ทผ์ ํ๋กํผํฐ (Accessor Property) (0) | 2025.08.19 |
| B12 : ๊ฐ์ฒด (0) | 2025.08.19 |
| ํธ๋์คํ์ผ๋ฌ์ ํด๋ฆฌํ (2) | 2025.08.19 |
GitHub