-
[Swift] Copy On Write (COW)Swift 2022. 3. 3. 03:02
Copy On Write (COW)
Swiftμ 컬λ μ μ λͺ¨λ κ΅¬μ‘°μ²΄λ‘ κ΅¬νλ κ° νμμΈλ°, κ°μ΄ μ¬μ©λ λλ§λ€ 볡μ¬λλ κ²μ μ±λ₯ μΈ‘λ©΄μμ μ’μ§ μλ€. μ΄ λ¬Έμ λ₯Ό μ΅μννκΈ° μν΄ Swift Standard λΌμ΄λΈλ¬λ¦¬λ Swiftμ Collection νμ (Array, Dictionary, Set) μ λν΄ Copy On Write 맀컀λμ¦μ μ μ©μμΌ°λ€. λ°λμ 볡μ¬κ° νμν κ²½μ°μλ§ λ³΅μ¬λ₯Ό νλ κ²μΌλ‘, 컬λ μ μ΄ λ³κ²½λλ μμ μλ§ μ»¬λ μ μ μλ‘ λ³΅μ¬νμ¬ μ¬μ©νλ€. μ¦, 컬λ μ μ΄ λ³κ²½λμ§ μλλ€λ©΄ νμ λμΌν λ°μ΄ν°λ₯Ό μ¬μ©νλ€.
Copy On Writeλ?
λ§ κ·Έλλ‘ Write (μμ )λ λ 볡μ¬νλ€ λΌλ λ»μΌλ‘, λΆνμν 볡μ¬μ λ©λͺ¨λ¦¬ μμ±μ μ΅λν μ€μ¬μ μ½λμ μ€ν μ±λ₯μ λμ΄λ κ²μ΄λ€.
μμλ₯Ό 보μ.
import Foundation func print(address o: UnsafeRawPointer) { print(String(format: "%p", Int(bitPattern: o))) } var array1: [Int] = [0, 1, 2, 3] var array2 = array1 // #1, array1, array2μ κ°μ ν λΉλ§ νκ³ νλ¦°νΈ print(address: array1) // 0x6000038441a0 print(address: array2) // 0x6000038441a0 // #2. array2λ₯Ό λ³κ²½νκ³ νλ¦°νΈ array2.append(1) print(address: array2) // 0x6000009540e0 // Output // 0x6000038441a0 array1 address // 0x6000038441a0 array2 address before mutation // 0x6000009540e0 array2 address after mutation#1μμλ κ°μ μ¬μ©νμ¬ array1μ μμ±νκ³ , array1μ array2μ ν λΉνλ€. μ¬κΈ°μ κ°μ Copy-on-Writeλ‘ μΈν΄ 볡μ¬κ° λμ§ μκ³ array1κ³Ό array2λ λμΌν μ£Όμλ₯Ό κ°λ¦¬ν¨λ€. νμ§λ§ #2μμ array2μ κ°μ΄ λ³κ²½λ λ κ·ΈλμμΌ λΉλ‘μ κ°μ΄ 볡μ¬λκ³ , μ€μ μ£Όμλ λ€λ₯Έ μ£Όμλ‘ λ°λ κ²μ νμΈν μ μλ€.

μ¦, Copy On Writeλ 무쑰건 볡μ¬λ₯Ό νλ€κ³ ν΄μ κΌ μμ μ νλ κ²μ΄ μλκΈ° λλ¬Έμ μ€μ λ‘ μμ μ΄ λ°μνμ λ 볡μ¬λ₯Ό νκ³ , κ·Έ μ μλ μ°Έμ‘°λ₯Ό ν΅ν΄μ λΆνμν 볡μ¬λ₯Ό μ€μ΄λ κ²μ΄λ€.

Copy On Writeλ‘ μΈν΄μ 첫λ²μ§Έ μμ μμ μ ν λλ 볡μ¬λ₯Ό ν΄μΌνκΈ° λλ¬Έμ μ€ν μκ°μ΄ λ μ€λ κ±Έλ¦°λ€. μ€μ λ‘ λλ²μ§Έ, μΈλ²μ§Έ μμ μμ λμλ 첫λ²μ§Έ μμ μμ λ³΄λ€ λΉκ΅μ μ€ν μκ°μ΄ μ μ κ²μ νμΈν μ μλ€.
Copy On Writeλ κ° νμ μ 볡μ¬λ³Έμ μ΅μ ννλ λ§€μ° μ’μ λ°©μμ΄κ³ Swiftμμλ λ§μ΄ μ¬μ©λλ 맀컀λμ¦μ΄λ€. λ€νν νμ€ λΌμ΄λΈλ¬λ¦¬μμ ꡬνλλ―λ‘, μ°λ¦¬κ° λλΆλΆ λͺ μμ μΌλ‘ λ³Ό μλ μλ€. νμ§λ§ μ΄λ₯Ό νμ€ν μκ³ νμ©ν μ μλλ‘ νμ!
μ°Έκ³ λ¬Έμ
Understanding Swift Copy-on-Write mechanisms
In Swift, we have reference types(Classes) and value types (Structs, Tuples, enums). The value types have a copy semantic. That means if…
medium.com
Swift) COW (Copy-on-Write)
μλ νμΈμ μλ€μ λλ€ π μ€λμ λκ° μΆμΆ μ³μ§λ λ μ΄λ€μ λ©°μΉ μ§Έ κ³μλλ μ₯λ§ νλ μκ³ .. (λΉ νμ€μ) κ°λ°κ³Όλ μ°Έ μ μ¦μ κ΄κ³μΈ κ²μΈμ§.. 곡λΆν 건 λ~~~~~~무 λ§κ³ ..γ γ λ©μ§ κ°λ°μ
babbab2.tistory.com
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] Type Alias (typealias) (νμ λ³μΉ μ μΈ) (0) 2022.03.23 [Swift] Delegate, Notification, KVO (0) 2022.03.15 [Swift] Access Control (μ κ·Ό μ μ΄) (0) 2022.02.28 [Swift] print ν¨μ (separator, terminator) (0) 2022.02.26 [Swift] UIColor (0) 2022.02.15