🟨 JavaScript/ν•¨μˆ˜

[JavaScript] ν•¨μˆ˜μ˜ λΆˆλ³€μ„±(Immutability) μ΄λž€?

10000COW 2022. 12. 20. 22:10
728x90

ν•¨μˆ˜μ˜ λΆˆλ³€μ„±μ΄λž€?

ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ™ΈλΆ€λ‘œλΆ€ν„° 주어진 parameter의 κ°’ λ˜λŠ” μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„μ•Ό 함을 λœ»ν•œλ‹€.

κ°’ λ˜λŠ” μƒνƒœ 변경이 ν•„μš”ν•œ κ²½μš°μ—λŠ” μƒˆλ‘œμš΄ κ°’ λ˜λŠ” 객체(Object)λ₯Ό λ§Œλ“€μ–΄μ„œ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.

 


Primitive Type 데이터

primitive λ°μ΄ν„°μ˜ 경우 κ°’을 볡사(pass by value)ν•˜κΈ° λ•Œλ¬Έμ—, ν•¨μˆ˜μ— 맀개 λ³€μˆ˜λ‘œ μ „λ‹¬λœ 데이터λ₯Ό λ³€κ²½ν•˜λ”λΌλ„, μ›λž˜ λ³€μˆ˜λŠ” λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

κ·ΈλŸΌμ—λ„, λ‹€λ₯Έ κ°œλ°œμžλ‚˜ μ‚¬μš©μžλ“€μ΄ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•¨μ— μžˆμ–΄ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ›λž˜μ˜ 값을 λ°”κΎΈλŠ” 것은 쒋지 μ•ŠκΈ° λ•Œλ¬Έμ—

μƒˆλ‘œμš΄ λ³€μˆ˜λ₯Ό μƒμ„±ν•΄μ„œ, νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœ 값을 ν• λ‹Ήν•œ 이후에 λ³€κ²½ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.

예λ₯Όλ“€μ–΄, const count = val, count = 6

μ΄λŸ°μ‹μœΌλ‘œ countλΌλŠ” μƒˆλ‘œμš΄ λ³€μˆ˜λ₯Ό ν•¨μˆ˜ μ•ˆμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ§Œλ“€μ–΄ 놓고, 이 λ³€μˆ˜λ₯Ό 가지고 λ³€κ²½ν•˜κ±°λ‚˜ ν™œμš©ν•˜λŠ” 것이 μ’‹λ‹€.

 

function countUp(val){
  val = 6;
  console.log(val); // 6
}

const start = 1;
countUp(start);
console.log(start) // 1

Object Type 데이터

반면, object λ°μ΄ν„°μ˜ κ²½μš°μ—λŠ” ν•¨μˆ˜μ— 맀개 λ³€μˆ˜λ‘œ μ „λ‹¬λ˜μ—ˆμ„ λ•Œ,

ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 맀개 λ³€μˆ˜λ‘œ μ „λ‹¬λœ object λ°μ΄ν„°μ˜ μƒνƒœλ₯Ό λ³€κ²½ν•œλ‹€λ©΄

이 맀개 λ³€μˆ˜λŠ” κ²°κ΅­ μ‹€μ œ 객체의 μ£Όμ†Œλ₯Ό 가리킀고 μžˆμœΌλ―€λ‘œ(pass by reference), μ‹€μ œ 객체의 μƒνƒœκ°€ 변경됨을 μ£Όμ˜ν•΄μ•Ό ν•œλ‹€. 

(μ•„λž˜ μ½”λ“œμ—μ„œ μ‹€μ œ 객체 VIP의 name이 SONμ—μ„œ Kane으둜 λ³€κ²½λ˜μ—ˆλ‹€.)

λ”°λΌμ„œ λ§€κ°œλ³€μˆ˜λ‘œ λ°›λŠ” 경우, μƒνƒœλ₯Ό λ³€κ²½ν•  ν•„μš”κ°€ μžˆμ„ κ²½μš°μ—λŠ” changeVIP ν•¨μˆ˜ 내에 μƒˆλ‘œμš΄ Objectλ₯Ό λ§Œλ“€μ–΄μ„œ λ³€κ²½ν•˜κ±°λ‚˜ λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.

 

function changeVIP(vip){
  vip.name = 'Kane'
  console.log(vip); // { name: 'Kane', club: 'Tottenham' }
}

const VIP = {
  name: 'SON',
  club: 'Tottenham'
}

changeVIP(VIP);
console.log(VIP); // // { name: 'Kane', club: 'Tottenham' }
728x90