μμ½
π
λ°μ΄ν°κ° μ λΆ λΆλ³νμ΄λ©΄ μκ°μ λ°λΌ λ³νλ μν (e.g. μ₯λ°κ΅¬λ μν) λ₯Ό μ΄λ»κ² λ€λ£° μ μλ?
-> κ·Έλ΄ λλ 'κ΅μ²΄(swapping)'λ₯Ό νλ€.
λΆλ³ λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©νλ©΄ λΉμ°ν λ©λͺ¨λ¦¬λ₯Ό λ λ§μ΄ μ°κ³ λ λ리λ€.
νμ§λ§,
- GCλ λ§€μ° λΉ λ₯΄κ³ , μκ°λ³΄λ€ λ§μ΄ λ³΅μ¬ νμ§ μλλ€.
- μμ 볡μ¬, ꡬ쑰μ 곡μ
- ν¨μν νλ‘κ·Έλλ° μΈμ΄μμ μ§μνλ λΆλ³ λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©νλ©΄ λλ€.
- μ§μ λ§λ κ² λ³΄λ€ ν¨μ¨μ . μ΅λν λ§μ ꡬ쑰λ₯Ό 곡μ νλ€. μ΄ μμ copy-on-writeμ κΈ°λ°ν ꡬν.
- μΈμ λ μ΅μ ν νλ©΄ λλ€.
- μ ν리μΌμ΄μ
κ°λ°μμ λ³λͺ© μ§μ μ νμ μμμΉ λͺ»ν μ§μ μμ λ°μ. 미리 μ΅μ ν νκΈ° 보λ€λ μΌλ¨ λ§λ€μ΄ λκ³ λλ¦° λΆλΆμ΄ μλ€λ©΄ κ·Έ λ μ΅μ ν.
π
κ°μ²΄μ λν copy-on-write
-> λ°°μ΄κ³Ό λμΌν λ°©μ
1. 볡μ¬λ³Έ λ§λ€κΈ° 2. 볡μ¬λ³Έ λ³κ²½νκΈ° 3. 볡μ¬λ³Έ 리ν΄νκΈ°.
λ€λ§, μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄λ₯Ό 볡μ¬νκΈ° μν΄μλ Object.assign()
λ©μλλ₯Ό νμ©νλ€.
λ°μ·
μμ λ³΅μ¬ (shallow copy)
μ€μ²©λ λ°μ΄ν° ꡬ쑰μ μ΅μμ λ°μ΄ν°λ§ 볡μ¬. μλ₯Ό λ€μ΄, κ°μ²΄λ₯Ό μμλ‘ κ°μ§λ λ°°μ΄μ 'μμ 볡μ¬' νλ©΄, λ°°μ΄λ§ 볡μ¬νκ³ μμ μλ κ°μ²΄λ μ°Έμ‘°λ‘ κ³΅μ .
ꡬ쑰μ 곡μ (structural sharing)
λ κ°μ μ€μ²©λ λ°μ΄ν° κ΅¬μ‘°κ° μ΄λ€ μ°Έμ‘°λ₯Ό 곡μ νλ€λ©΄, 'ꡬ쑰μ 곡μ ' λΌκ³ νλ€.
λ©λͺ¨
- ꡬ쑰μ 곡μ λ μ°Έμ‘°λ₯Ό 곡μ νλλ°, μ΄ λ λ°μν μ μλ λ°μ΄ν° λ³κ²½μ μνμ μμκΉ?
- λΆλ³ λ°μ΄ν° ꡬ쑰 νμμ ꡬ쑰μ 곡μ λ μμ νλ€. μ΄μ° λλ μ°Έμ‘°λ₯Ό ν΅ν΄ μ§μ 'μ°κΈ°'λ₯Ό νμ§ μκΈ° λλ¬Έμ΄λ€.
μλ₯Ό λ€μ΄, κ°μ²΄λ€μ κ°μ§λ λ°°μ΄μ μμ 볡μ¬νμ¬ κ΅¬μ‘°μ 곡μ λ₯Ό ν ν, 볡μ¬λ λ°°μ΄μ μμ μ€ νλμ κ°μ²΄λ₯Ό λ³κ²½νλ€κ³ ν΄λ³΄μ. μ΄ λλ, κ·Έ κ°μ²΄λ₯Ό λ€μ 볡μ¬νκ³ -> κ·Έ 볡μ¬λ³Έμ λ³κ²½νκ³ -> λ³κ²½λ 볡μ¬λ³Έμ μλ κ°μ²΄μ μ리μ ν λΉνλ©΄μ 'κ΅μ²΄'νκΈ° λλ¬Έμ λ°μ΄ν° λ³κ²½μ μνμ΄ μλ€.