
μ£Όμ κ°μ 볡μ¬νλ€. μ¦, κ° μ체λ₯Ό 볡μ¬νλ κ²μ΄ μλλΌ μ£Όμκ°μ 볡μ¬νμ¬ κ°μ λ©λͺ¨λ¦¬λ₯Ό κ°λ¦¬ν¨λ€.μλμ μμλ₯Ό μ΄ν΄λ³΄μ. μμ λ³΅μ¬ μμλ κ°μ²΄(λ°°μ΄λ κ°λ₯)λ₯Ό μ€νλ λ μ°μ°μ(...)λ₯Ό νμ©νμ¬ λ³΅μ¬νλ€.
let profile = {
name : "μ² μ",
age : 12,
school : "λ€λμ₯μ΄λ±νκ΅"
}
let profile2 = {...profile} //μ€νλ λ μ°μ°μλ₯Ό μ¬μ©
profile.name = "μν¬"
profile2 // {name: 'μ² μ', age: 12, school: 'λ€λμ₯μ΄λ±νκ΅'}
profile // {name: 'μν¬', age: 12, school: 'λ€λμ₯μ΄λ±νκ΅'}
profileμλ μ² μμ μ λ³΄κ° λ€μ΄μλ€. μ΄ profileμ μ€νλ λ μ°μ°μλ₯Ό μ΄μ©νμ¬ profile2μ 볡μ¬ν΄μ€ ν μλ³Έ(profile)μ κ°μ λ³κ²½νμμ λ, μ¬λ³Έμλ μν₯μ λΌμΉμ§ μλ κ²μ νμΈν μ μλ€.
κ·Έλ°λ° μ¬κΈ°μ λ¬Έμ μ μ, μμ 볡μ¬λ‘λ κ°μ²΄ μμ κ°μ²΄(depth 2 μ΄μ)κΉμ§ 볡μ¬κ° λμ§ μλλ€.
let profile = {
name : "μ² μ",
age : 12,
school : "λ€λμ₯μ΄λ±νκ΅",
hobby: {
hobby1: "μμ",
hobby2: "μμ κ±°"
}
}
let profile2 = {...profile}
/* depth 1μΈ κ°μ λ³κ²½νκΈ° */
profile.name = "μν¬"
profile
// {name: 'μν¬', age: 12, school: 'λ€λμ₯μ΄λ±νκ΅', hobby: {β¦}}age: 12hobby: {hobby1: 'μμ', hobby2: 'μμ κ±°'}name: "μν¬"school: "λ€λμ₯μ΄λ±νκ΅"[[Prototype]]: Object
profile2
// {name: 'μ² μ', age: 12, school: 'λ€λμ₯μ΄λ±νκ΅', hobby: {β¦}}age: 12hobby: {hobby1: 'μμ', hobby2: 'μμ κ±°'}name: "μ² μ"school: "λ€λμ₯μ΄λ±νκ΅"[[Prototype]]: Object
/* depth 2μΈ κ°μ λ³κ²½νκΈ° */
profile2.hobby.hobby1 = "μ μκΈ°"
profile2
// {name: 'μ² μ', age: 12, school: 'λ€λμ₯μ΄λ±νκ΅', hobby: {β¦}}age: 12hobby: {hobby1: 'μ μκΈ°', hobby2: 'μμ κ±°'}name: "μ² μ"school: "λ€λμ₯μ΄λ±νκ΅"[[Prototype]]: Object
profile
// {name: 'μ² μ', age: 12, school: 'λ€λμ₯μ΄λ±νκ΅', hobby: {β¦}}age: 12hobby: {hobby1: 'μ μκΈ°', hobby2: 'μμ κ±°'}name: "μ² μ"school: "λ€λμ₯μ΄λ±νκ΅"[[Prototype]]: Object
μμ μμλ₯Ό 보면 depthκ° 2μΈ μ¬λ³Έ(profile2)μ hobbyκ°μ²΄ μμ hobby1κ°μ λ³κ²½νμμ λ, μλ³Έμ hobby1μλ μν₯μ λΌμΉλ κ²μ νμΈν μ μλ€. μμ ν λΆλ¦¬λ κ°μ²΄λ₯Ό λ§λ€ μλ μμκΉ? μ΄ λ μ¬μ©ν μ μλ κ²μ΄ κΉμ 볡μ¬(Deep copy)μ΄λ€.
let profile = {
name : "μ² μ",
age : 12,
school : "λ€λμ₯μ΄λ±νκ΅",
hobby: {
hobby1: "μμ",
hobby2: "μμ κ±°"
}
}
/* JSONμ μ΄μ©νμ¬ μλ³Έμ stringμΌλ‘ λ°κΏμ£ΌκΈ° - μλ κ²°κ³Όλ₯Ό 보면 μλ€λ‘ ''κ° λΆμ κ²μ νμΈν μ μλ€. */
JSON.stringify(profile)
// '{"name":"μν¬","age":12,"school":"λ€λμ₯μ΄λ±νκ΅","hobby":{"hobby1":"μμ","hobby2":"μμ κ±°"}}'
/* JSONμ μ΄μ©νμ¬ stringμΌλ‘ λ³κ²½λ ꡬ문μ λΆμνμ¬ μλ‘μ΄ κ° νΉμ κ°μ²΄λ‘ μμ±νκΈ°(μλ λ μμλ κ°μ μμ) */
profile2 = JSON.parse(JSON.stringify(profile))
profile3 = JSON.parse('{"name":"μν¬","age":12,"school":"λ€λμ₯μ΄λ±νκ΅","hobby":{"hobby1":"μμ","hobby2":"μμ κ±°"}}')
// {name: 'μν¬', age: 12, school: 'λ€λμ₯μ΄λ±νκ΅', hobby: {β¦}}
JSONμ parse()μ stringify()λ©μλλ₯Ό μ¬μ©νλ©΄ μλ‘μ΄ μ£Όμκ° ν λΉλμ΄ μλ‘ μν₯μ λΌμΉμ§ μλλ€. μ¬κΈ°μ JSONμ κ°μ²΄λ μλκ³ κ°μ²΄μ²λΌ μκΈ΄ μμ΄μ΄λ€.
[ + ] μΆκ°μ μΌλ‘ LodashλΌλ λΌμ΄λΈλ¬λ¦¬μ cloneDeepμ΄λΌλ λ©μλκ° μλ€. cloneDeep()μ κΉμ 볡μ¬λ₯Ό ν΄μ£Όλ λ©μλμΈλ°, μμμ JSONμ parse()μ stringify()λ₯Ό μ¬μ©ν κ²λ³΄λ€ ν¨μ¨μ±μ΄ ν¨μ¬ μ’λ€.