COW는 Copy-on-Write의 약자로 객체나 값이 변경될 때까지 데이터를 복사하지 않고 지연시켜서 성능을 최적화하는 기법이다. 주로 값 타입(struct, enum)에서 사용되며, Array, Dictionary, Set등의 컬렉션 타입에서 이를 구현하여 데이터 복사를 최소화 한다
// arr1, arr2는 처음에 동일한 메모리를 공유한다.
// 그러나 arr2의 값을 수정하게 되면 cow가 동작하여 arr1은 유지 되고 arr2는 복사본을 사용하게 된다
var arr1 = [1, 2, 3]
var arr2 = arr1 // arr1을 arr2에 복사
arr2[0] = 100 // arr2의 첫 번째 값을 수정
print(arr1) // [1, 2, 3]
print(arr2) // [100, 2, 3]
COW는 성능 최적화의 중요한 기법으로, 필요한 때만 복사를 수행하고 불필요한 복사를 피하는 방식이다