πŸ”— [JavaScript] κΉŠμ€ 볡사, 얕은 볡사

JiHun SongΒ·2022λ…„ 9μ›” 29일
0
post-thumbnail

μ„œλ‘ 

μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄μš©ν•œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ λ³€μˆ˜ λ˜λŠ” 배열을 볡사λ₯Ό 많이 μ΄μš©ν•œλ‹€.
ν—·κ°ˆλ Έλ˜ κΉŠμ€ 볡사와 얕은 볡사, μ „κ°œμ—°μ‚°μž κΉŒμ§€ μ •λ¦¬ν•œλ‹€.
μš°μ„  μ›μ‹œν˜•κ³Ό μ°Έμ‘°ν˜•μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž!

μ›μ‹œν˜•κ³Ό μ°Έμ‘°ν˜•

μ›μ‹œν˜•μ΄λž€ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 객체가 μ•„λ‹ˆλ©΄μ„œ λ©”μ„œλ“œλ„ 가지지 μ•Šμ€ λ°μ΄ν„°μž…λ‹ˆλ‹€. (좜처 - MDN)

number, string, boolean, null, undefined 등이 ν•΄λ‹Ήλ©λ‹ˆλ‹€.

μ›μ‹œν˜•μ˜ 값은 λ³€ν˜•ν•  수 μ—†κ³ (λΆˆλ³€μ„±), μž¬ν• λ‹Ήμ„ ν•΄μ•Όν•©λ‹ˆλ‹€.

let a = 1; // μ£Όμ†Œ : 1000, κ°’ : 1
a = 2; // μ£Όμ†Œ : 1001, κ°’ : 1

μœ„μ— μ½”λ“œ 처럼 값을 λ³€κ²½ν•œλ‹€λ©΄ μƒˆ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•˜κ³  값을 λ³€κ²½ν•©λ‹ˆλ‹€.
즉, μ›μ‹œν˜•μ€ λΆˆλ³€μ„±μ„ μœ μ§€ν•˜κ³ , λ³€μˆ˜λŠ” κ°€λ¦¬ν‚€λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό λ°”κΏ”κ°€λ©΄μ„œ λ³€μˆ˜ 값을 λ³€κ²½ν•©λ‹ˆλ‹€. κ°’ 볡사 = κΉŠμ€ 볡사


μ°Έμ‘°ν˜•μ΄λž€ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ›μ‹œν˜•μ΄ μ•„λ‹Œκ²ƒλ“€μ€ λͺ¨λ‘ μ°Έμ‘°ν˜•μž…λ‹ˆλ‹€.

객체, λ°°μ—΄, ν•¨μˆ˜κ°€ ν•΄λ‹Ήλ©λ‹ˆλ‹€.

μ°Έμ‘°ν˜•μ€ λ³€μˆ˜μ— ν• λ‹Ήν•  λ•ŒλŠ” λ³€μˆ˜ 값이 μ•„λ‹Œ μ£Όμ†Œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. μ£Όμ†Œλ³΅μ‚¬ = 얕은 볡사


κΉŠμ€ 볡사(Deep copy)λž€?

  • 독립적인 λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€ν•œλ‹€.
  • 데이터 κ°’ 자체λ₯Ό λ³΅μ‚¬ν•œλ‹€.

얕은 λ³΅μ‚¬λž€?

  • μ£Όμ†Œ 값을 λ³΅μ‚¬ν•œλ‹€.
  • κΉŠμ€ 볡사보닀 μƒλŒ€μ μœΌλ‘œ λΉ λ₯΄λ‹€.
let a = {value : 1} // μ£Όμ†Œκ°’ : 1000, κ°’ : value = 1
let b = a; // μ£Όμ†Œκ°’ : 1000, κ°’ : value = 1

b.value = 2;

console.log(a); // {number : 2}
console.log(b); // {number : 2}

μ „κ°œμ—°μ‚°μžλž€?

  • μžλ°”μŠ€ν¬λ¦½νŠΈ ES6λΆ€ν„° μ§€μ›ν•˜λŠ” 문법이닀.
  • κΉŠμ€ λ³΅μ‚¬λ‘œ μ μš©λ˜μ–΄ 독립적인 λ©”λͺ¨λ¦¬λ₯Ό μ°¨μ§€ν•œλ‹€.
let person = {
  name : 'song'
  age : '1'
};

let copy = {...person};
copy.age = 2;

console.log(person);// {name : 'song', age : 1}
console.log(copy); // {name : 'song', age : 2}

정리

κΉŠμ€ λ³΅μ‚¬λŠ” μ‹€μ œ 값을 λ³΅μ‚¬ν•œλ‹€.
얕은 λ³΅μ‚¬λŠ” μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•œλ‹€.

profile
ν΄λ¦°μ½”λ“œλ₯Ό μ’‹μ•„ν•˜λŠ” 개발자

0개의 λŒ“κΈ€