ν€-κ° μμ΄ μ¬λ¬ κ°μΈ κ°μ²΄κ° μμ΅λλ€. λ¬Έμ λ κ°μ²΄κ° μμ νμ§ μλ€λ κ²μ
λλ€. μ΄ λ¬Έμ λ κ°μ²΄μ κΈ°μ‘΄λ°μ΄ν°κ° μλ μνμμ μλ‘μ΄ νλλ₯Ό μΆκ°νλ κ²½μ°λ μΈλΆ APIμμ λ°μ΄ν°λ₯Ό κ°μ Έμ νμ¬ λ°μ΄ν° λͺ¨λΈμ μ°κ²°ν΄μΌ νλ κ²½μ°μ μμ£Ό λ°μν©λλ€. μ΄λ μͺ½μ΄λ λ¬Έμ κ° λλ λΆλΆμ κ°μ΅λλ€. μλ‘μ΄ νλ λλ λ°μ΄ν°λ‘ μ±μμ§μ§ μλ λλ¨Έμ§ λΆλΆμ κΈ°λ³Έκ° κ°μ²΄λ‘ μ±μμΌ νλ€λ μ μ
λλ€.
κΈ°λ³Έκ°μ μ€μ νλ©΄μ μλμ λ°μ΄ν°λ₯Ό μ μ§νλ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ?
λΉμ°ν λΆμ ν¨κ³Όλ μ‘°μμ λ°μνμ§ μμμΌ ν©λλ€.
κΈ°λ³Έκ°μ μ€μ νλ©΄μ μλμ λ°μ΄ν°λ₯Ό μ μ§νλ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ?
λΉμ°ν λΆμ ν¨κ³Όλ μ‘°μμ λ°μνμ§ μμμΌ ν©λλ€.
π Object.assign()μ μ΄μ©ν κ°μ΄ μ€μ²©λμ§ μμ κ°μ²΄μ λ³΅μ¬ (Shallow Copy)
const default = {
author:'',
title:'',
year:2017,
rating:null
};
const book = {
author : 'joe Morgan',
title : 'Simplifying JavaScript'
};
const updated = Object.assign({}, defaults, book);
console.log(updated);
//{
// author : 'joe Morgan',
// title : 'Simplifying JavaScript,
// year:2017,
// rating:null
//}μμ μ½λλ defaultsμ book κ°μ²΄λ₯Ό λ³ν©νμ¬ μμ 볡μ¬λ₯Ό μνν©λλ€. νμ§λ§ details κ°μ²΄λ μ°Έμ‘° κ΄κ³κ° μ μ§λλ―λ‘ shallowCopy κ°μ²΄λ₯Ό μμ νλ©΄ defaultsλ bookμλ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
π Object.assign()μ μ΄μ©ν κ°μ΄ μ€μ²©λ κ°μ²΄μ λ³΅μ¬ (Deep Copy)
μ€μ²©λ κ°μ²΄κ° μλ κ²½μ°μ Object.assign()μ μ΄μ©ν΄μ 볡μ¬νλλ‘ νλ©΄ λͺ¨λ κ²μ κ°±μ ν μ μμ΅λλ€.
const defaultEmployee = {
name : {
first : '',
last : ''
}
years : 0,
};
const employee = Object.assign({}, defaultEmployee);μμ μ½λμμ name μμ±μ λ³΅μ¬ ν μ μμ΅λλ€. μ€μ λ‘ ν€ nameμ ν λΉλ λ
립μ μΈ κ°μ²΄μ λν΄ μ°Έμ‘°λ§ λ³΅μ¬ λ©λλ€. μ€μ²©λ κ°μ²΄λ ν΄λΉ κ°μ²΄λ₯Ό λ΄κ³ μλ κ°μ²΄μ λ
립μ μΌλ‘ μ‘΄μ¬ν©λλ€.
μ€μ²©λ κ°μ²΄λ₯Ό λ΄κ³ μλ κ°μ²΄κ° κ°μ§κ³ μλ κ²μ μ€μ²©λ κ°μ²΄μ λν μ°Έμ‘° λΏμ λλ€. μ°Έμ‘°μ λν 볡μ¬λ§μΌλ‘λ μ€μ²©λ κ°μ²΄μ κΉμ 볡μ¬λ₯Ό μ μ©ν μ μμ΅λλ€. λ¨μ§ μ°Έμ‘°μ μμΉλ₯Ό 볡μ¬νλ κ²μ λΆκ³Ό ν©λλ€.
λ°λΌμ μλ³Έ κ°μ²΄ λλ 볡μ¬ν κ°μ²΄ μ€ μ΄λμλΌλ μ€μ²©λ κ°μ²΄μ κ°μ λ³κ²½νλ©΄ μλ³Έ κ°μ²΄μ 볡μ¬ν κ°μ²΄ λͺ¨λ λ³κ²½λ©λλ€.
μ€μ²©λ κ°μ²΄λ₯Ό λ΄κ³ μλ κ°μ²΄κ° κ°μ§κ³ μλ κ²μ μ€μ²©λ κ°μ²΄μ λν μ°Έμ‘° λΏμ λλ€. μ°Έμ‘°μ λν 볡μ¬λ§μΌλ‘λ μ€μ²©λ κ°μ²΄μ κΉμ 볡μ¬λ₯Ό μ μ©ν μ μμ΅λλ€. λ¨μ§ μ°Έμ‘°μ μμΉλ₯Ό 볡μ¬νλ κ²μ λΆκ³Ό ν©λλ€.
λ°λΌμ μλ³Έ κ°μ²΄ λλ 볡μ¬ν κ°μ²΄ μ€ μ΄λμλΌλ μ€μ²©λ κ°μ²΄μ κ°μ λ³κ²½νλ©΄ μλ³Έ κ°μ²΄μ 볡μ¬ν κ°μ²΄ λͺ¨λ λ³κ²½λ©λλ€.
const defaultEmployee = {
name : {
first : '',
last : ''
}
years : 0,
};
const employee2 = Object.assign(
{},
defaultEmployee,
{
name : Object.assign({} , defaultEmployee.name)
}
);π Lodashλ₯Ό μ΄μ©ν κΉμ λ³΅μ¬ cloneDeep
Lodash λΌμ΄λΈλ¬λ¦¬λ κΉμ 볡μ¬λ₯Ό μννλ cloneDeep λ©μλλ₯Ό μ 곡ν©λλ€. Lodashλ μΌλ°μ μΈ μ νΈλ¦¬ν° ν¨μλ€μ λͺ¨μλμ λΌμ΄λΈλ¬λ¦¬λ‘μ, κΉμ 볡μ¬λ₯Ό μ½κ² μ²λ¦¬ν μ μκ² λμμ€λλ€.
const _ = require('lodash');
const defaults = {
author: '',
title: '',
details: {
pages: 0,
language: ''
}
};
const book = {
author: 'John Doe',
title: 'Sample Book',
details: {
pages: 200,
language: 'English'
}
};
const deepCopyResult = _.cloneDeep(defaults);
_.merge(deepCopyResult, book);
console.log(deepCopyResult);cloneDeep ν¨μλ₯Ό μ¬μ©νλ©΄ μ€μ²©λ κ°μ²΄κΉμ§ κΉμ 볡μ¬κ° μ΄λ£¨μ΄μ§λλ€. μ΄ν merge ν¨μλ₯Ό μ¬μ©νμ¬ λ κ°μ²΄λ₯Ό λ³ν©ν μ μμ΅λλ€.
π JSON.stringify() μ΄μ©ν κΉμ λ³΅μ¬ cloneDeep
JSON.stringify()μ JSON.parse()λ₯Ό μ΄μ©νμ¬ κ°μ²΄λ₯Ό λ¬Έμμ΄λ‘ λ³ννκ³ λ€μ νμ±νμ¬ κΉμ 볡μ¬λ₯Ό μνν μ μμ΅λλ€. λ¨, μ΄ λ°©λ²μ ν¨μλ νΉλ³ν νμ
μ κ°μ²΄μλ μ μ©λμ§ μμ μ μμ΅λλ€.
const originalObject = {
nestedObject: {
key: 'value'
},
otherKey: 'otherValue'
};
const deepCopy = JSON.parse(JSON.stringify(originalObject));
νμ§λ§ μ΄λ°©λ²μ μ¬μ©νκΈ°λ μ½μ§λ§ λ€λ₯Έ λ°©λ²μλΉν΄ μμ£Ό λ리λ€κ³ μλ €μ Έ μμ΅λλ€.