본문 바로가기

난 iOS개발자/iOS

COW(Copy On Write)

728x90

원본 또는 복사본이 수정되기 전까지 복사를 하지 않고 원본 리소스를 공유하는것.
수정이 일어날 경우, 그때 복사하는 작업을 함

 

 

Swift에서는 CollectionType을 복사해서 사용할 때 발생한다.

: Array/ Dictionary/ Set 

아래 코드를 보자

var array1 [Int] = [1, 2, 3, 4]
var array2 = array1

Array는 구조체이다. array2는 array1을 할당했으니 array1의 값이 array2에서 복사되어야하는데.

그렇다면 array1과 array2는 서로 다른 주소를 갖고 있어야하는것이 맞다. 그러나 cow는 바로 복사하지 않는다.

 

array2에서 수정이 발생하지 않은 경우 array2도 array1의 주소를 참조하고 있는 형태가 된다. 또는 원본인 array1에서 값 수정이 발생한다면 array1에 주소가 변경된다.

반대로 array2에서 수정이 발생하면 array2의 주소가 변경된다. 수정이 먼저 일어난 놈의 주소가 바뀌는것이다.

 

COW의 장점

만약 array1의 길이가 십만이라고 해보자. 아니 더 클 수도 있다. array2에 array1을 할당하게 되면 두배의 메모리가 필요하다. 그러나 array2에서 수정을 하지 않고 그저 참조만 하게 될 뿐이라면 두배의 메모리가 필요하지 않다. 
그러므로 array1의 메모리주소를 참조하여 불필요한 복사를 줄이는 것이다. 이것이 장점이다.

 

두개의 컬렉션이 하나의 주소를 참조할때 첫 변경이 이뤄지는 작업은 약간의 오버헤드가 발생한다. 새로운 메모리 공간을 확보해야하기 때문이다.

 

굳이 찾는 단점이라면…?

두개의 컬렉션이 하나의 주소를 참조할때 첫 변경이 이뤄지는 작업은 약간의 오버헤드가 발생한다. 새로운 메모리 공간을 확보해야하기 때문이다.

728x90

'난 iOS개발자 > iOS' 카테고리의 다른 글

AppStore 화면 만들어보기  (0) 2022.06.26
HomeBrew설치 그리고 실패  (0) 2022.06.20
Global DispatchQueue의 QoSClass  (0) 2022.05.10
NSCache  (0) 2022.05.07
ARC(Auto Reference Counting)  (0) 2022.05.05