Persistent Data Structures - ChoDragon9/posts GitHub Wiki

λΆˆλ³€ 자료ꡬ쑰 - Immutable Data Structures

λΆˆλ³€ 자료 κ΅¬μ‘°λŠ” μ˜μ›νžˆ λ³€ν•˜μ§€ μ•ŠλŠ” μƒνƒœλ₯Ό λ§ν•œλ‹€. λ³€ν™”κ°€ ν•„μš”ν•  λ•Œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄ λ‚΄κ³  값을 λ³€κ²½ν•œλ‹€. 이전 μƒνƒœλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ©”λͺ¨λ¦¬ μƒμ—μ„œ μ œκ±°λœλ‹€.

clone을 μ‚¬μš©ν•œ μ˜ˆμ‹œ

λͺ¨λ‘ μƒˆλ‘­κ²Œ λ§Œλ“€κΈ° λ•Œλ¬Έμ— inner도 λ‹€λ₯Έ 객체가 λœλ‹€.

const clone = obj => JSON.parse(JSON.stringify(obj))

const obj = {
  message: 'Hello World',
  inner: { count: 1 }
}
const clonedObj = Object.assign(clone(obj), {
  message: 'Hello'
})

console.log(obj === clonedObj) // false
console.log(obj.inner === clonedObj.inner) // false

μ˜μ† 자료 ꡬ쑰 - Pesistent Data Structures

μ˜μ†μ„±(지속성)은 μƒνƒœλ₯Ό μ œκ±°ν•˜μ§€ μ•Šκ³  λ³΄μ‘΄ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

μ˜μ† 자료 κ΅¬μ‘°λŠ” μƒνƒœμ— λ³€ν™”κ°€ ν•„μš”ν•  λ•Œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•˜μ§€λ§Œ 이전 μƒνƒœλ₯Ό 계속 μœ μ§€ν•˜κ³  μžˆλŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€. λ‹€μ‹œ μƒνƒœ λ³€ν™”κ°€ ν•„μš”ν•œ μ‹œμ μ— 이전에 λ§Œλ“€μ—ˆλ˜ μƒνƒœμ™€ λ™μΌν•˜λ©΄ 이전 μƒνƒœλ₯Ό μ‚¬μš©ν•œλ‹€.

μƒνƒœλ₯Ό μ œκ±°ν•˜μ§€ μ•Šκ³  μž¬μ‚¬μš©ν•˜λ©° λ³€ν™”κ°€ ν•„μš”ν•  λ•ŒλŠ” μƒˆλ‘œ λ§Œλ“€κΈ° λ•Œλ¬Έμ— λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±κ³Ό λΆˆλ³€μ„±μ„ κ°€μ§ˆ 수 μžˆλ‹€.

μ˜μ† 자료 ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±μ΄ 비ꡐ적 λ–¨μ–΄μ§€λŠ” λΆˆλ³€ 자료 ꡬ쑰의 단점을 ν•΄κ²°ν•  수 μžˆλ‹€.

immerJs을 μ‚¬μš©ν•œ μ˜ˆμ‹œ

μƒνƒœκ°€ λ³€κ²½λ˜μ–΄ 객체λ₯Ό μƒˆλ‘œ λ§Œλ“€μ—ˆμ§€λ§Œ innerλŠ” 변경이 λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— κΈ°μ‘΄ μƒνƒœλ₯Ό μœ μ§€ν•œλ‹€.

const obj = {
  message: 'Hello World',
  inner: { count: 1 }
}
const clonedObj = immer.produce(obj, (draft) => {
  draft.message = 'Hello'
})

console.log(obj === clonedObj) // false
console.log(obj.inner === clonedObj.inner) // true

참고자료