Shallow Copy & Deep Copy

μ •μŠΉμ›Β·2023λ…„ 3μ›” 20일
0
post-thumbnail

πŸ“’ λͺ©μ°¨

  • πŸ“Œ μ›μ‹œκ°’κ³Ό μ°Έμ‘°κ°’
  • πŸ“Œ κΉŠμ€λ³΅μ‚¬ (Deep Copy)
  • πŸ“Œ 얕은볡사 (Shallow Copy)
  • πŸ“Œ μ°Έμ‘°

πŸ“Œ μ›μ‹œκ°’κ³Ό μ°Έμ‘°κ°’

βœ… μ›μ‹œκ°’

μ›μ‹œκ°’μ€ κΈ°λ³Έμžλ£Œν˜•μ΄λ‹€. (Number, String, Boolean, Null, Udefined)등이 ν•΄λ‹Ήλœλ‹€.
μ΄λŸ¬ν•œ μ›μ‹œκ°’μ„ μ €μž₯ν•˜λ©΄ λ³€μˆ˜μ˜ λ©”λͺ¨λ¦¬ 곡간에 μ‹€μ œ 데이터 값이 μ €μž₯λœλ‹€. λ”°λΌμ„œ 값을 λ³€κ²½ν•˜κ±°λ‚˜ μ‘°μž‘ν•˜λ €ν•˜λ©΄ μ €μž₯된 원본인 μ‹€μ œ 값이 μ‘°μž‘λ˜κ²Œ λœλ‹€.

βœ… μ°Έμ‘°κ°’

참쑰값은 λ©”λͺ¨λ¦¬μ— μ €μž₯된 객체이닀. (Object, Symbol)등이 ν•΄λ‹Ήλœλ‹€.
μ΄λŸ¬ν•œ 참쑰값을 μ €μž₯ν•˜κ²Œ 되면 λ©”λͺ¨λ¦¬ 곡간에 값을 μ €μž₯ν•˜κ³ , μ €μž₯된 λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ°Έμ‘°κ°’(μœ„μΉ˜κ°’)을 μ €μž₯ν•˜κ²Œ λœλ‹€.
λ”°λΌμ„œ 값을 μ‘°μž‘ν•˜λŠ” 것은 사싀, 객체λ₯Ό μ‘°μž‘ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 객체의 μ°Έμ‘°λ₯Ό μ‘°μž‘ν•˜λŠ” 것이닀.


πŸ“Œ κΉŠμ€λ³΅μ‚¬ (Deep Copy)

μ›μ‹œκ°’μ„ λ³΅μ‚¬ν•˜κ²Œ 되면, ν•΄λ‹Ή λ³΅μ‚¬λœ 값이 μƒˆλ‘œμš΄ 독립적인 λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜κ²Œ λœλ‹€. λ”°λΌμ„œ, 볡사λ₯Ό ν•˜κ³  μˆ˜μ •μ„ 해도 졜초 값은 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.
이와 같이 μ‹€μ œ 값을 λ³΅μ‚¬ν•˜μ—¬ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήν•˜κ³  λ…λ¦½μ μœΌλ‘œ μ‘°μž‘μ΄λ˜λŠ” 것이 κΉŠμ€ 볡사이닀.

const a= 'one';
let b = "two";

b= 'three';
console.log(a) // 'one'
console.log(b) // 'three'

πŸ“Œ 얕은볡사 (Shallow Copy)

참쑰값을 λ³΅μ‚¬ν•˜κ²Œ 되면, λ³€μˆ˜κ°€ 객체의 μ°Έμ‘°μ£Όμ†Œλ₯Ό 가리킀고 있기 λ•Œλ¬Έμ— λ³΅μ‚¬λœ μƒˆλ‘œμš΄ λ³€μˆ˜λ„ ν•΄λ‹Ή μ°Έμ‘°μ£Όμ†Œλ₯Ό κ°€λ¦¬ν‚€κ²Œ λœλ‹€. λ”°λΌμ„œ 객체λ₯Ό μˆ˜μ •ν•˜κ²Œ 되면 가리킀고 μžˆλŠ” μ£Όμ†Œκ°€ κ°™μ•„ κΈ°μ‘΄ 원본 객체의 값에 변동이 생긴닀.
이처럼 객체의 μ£Όμ†Œκ°’μ„ λ³΅μ‚¬ν•˜λŠ” 것을 얕은 볡사라고 ν•œλ‹€.

const obj = {
  name: "홍길동",
  age: 25
}
let obj2 = obj;
obj.name = "철수";

console.log(obj) // {name: "홍길동", age: 25}
console.log(obj2) // {name: "홍길동", age: 25}

πŸ“Œ μ°Έμ‘°

https://bbangson.tistory.com/78

0개의 λŒ“κΈ€