[Swift] Copy-On-Write (COW)

Martin Kim·2022년 9월 18일
0

Swift

목록 보기
11/11

Swift 에는 흥미로운 부분이 있다. 바로 Copy-On-Write, 사실 이것은 스위프트 만의 특징은 아니고 여러 다른 언어들도 가지고 있는 전반적인 특징이다.

한 줄로 말하자면,
어떤 값의 복사가 일어날 때, 실제로는 그 값을 복사하는게 아닌 참조한다. 그리고 원본이나 사본의 값을 수정하려고 할 때, 그제서야 값을 복사한다는 것이다.

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

코드 예시를 들어보자

let array1: [Int] = [1, 2, 3, 4] // Array는 구조체 형식이므로 값을 복사한다.
var array2 = array1 // 그러나 COW로 인해, 이 시점에는 값을 복사하지 않는다... 단지 array1을 참조하고 있다.
array1[0] = 2 // 이 시점에서 값의 실제 복사와 할당이 일어난다. 원본이나, 사본 둘 중 하나의 값을 수정하려고 하기 때문이다.

왜 COW를 사용할까?

  • 아마도 메모리를 최적화 하기 위해서이다.
  • 복사를 한다고, 반드시 수정을 하는것이 아니기 때문이다.
  • 단순한 값의 복사일 경우, 참조를 이용하면 실제로는 전혀 문제가 없다.
  • 따라서 불필요한 메모리의 사용을 줄일 수 있다.

단점도 존재한다.

  • 첫 수정때 값의 복사가 실제로 이뤄지기 때문에 이 시점에서 약간의 오버헤드가 발생한다.
profile
학생입니다

0개의 댓글