ν€-κ° μμ΄ μ¬λ¬ κ°μΈ κ°μ²΄κ° μμ΅λλ€. λ¬Έμ λ κ°μ²΄κ° μμ νμ§ μλ€λ κ²μ
λλ€. μ΄ λ¬Έμ λ κ°μ²΄μ κΈ°μ‘΄λ°μ΄ν°κ° μλ μνμμ μλ‘μ΄ νλλ₯Ό μΆκ°νλ κ²½μ°λ μΈλΆ 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));
νμ§λ§ μ΄λ°©λ²μ μ¬μ©νκΈ°λ μ½μ§λ§ λ€λ₯Έ λ°©λ²μλΉν΄ μμ£Ό λ리λ€κ³ μλ €μ Έ μμ΅λλ€.