1. COW
🐂 ?
웬 소?
ㅋㅋ 사실 COW는 (Copy - on - Write)의 약자이다.
컴퓨터가 프로그래밍에서 복사 동작을 할 때, 실제 원본이나 복사본이 수정되기 전까지는 복사를 하지 않고,
원본 리소스를 공유하다가 원본이나 복사본에서 수정이 일어날 경우 그때 복사하는 작업을 한다.
var array1 = [1, 2, 3]
var array2 = array1 // 여기서는 복사가 발생하지 않음, array1과 array2는 동일한 메모리를 참조
array2.append(4) // 여기서 복사가 발생, array2는 새로운 메모리 공간을 할당받고, array1과 분리됨
print(array1) // 출력: [1, 2, 3]
print(array2) // 출력: [1, 2, 3, 4]
위 개념은 보통 운영 체제에서 가상 메모리를 관리할 때 자주 사용된다. 프로세스가 새로운 메모리 페이지를 요청할 때,
CoW는 실제 복사를 지연시켜 메모리 사용을 최적화 한다.
위 예시코드까지 봤으니 한 번 이해해보자.
array1 에 [1,2,3]이라는 값이 들어가있지?
그 값을 array2에서 똑같이 받아왔을 때 우리는
array1 -> 1,2,3
array2 -> 1,2,3
과 같이 값을 복사해서 같은 값을 가지고 있어야 한다고 생각한다.
BUT!
그렇지 않다.
CoW를 사용하면 처음에 봤던 코드의 내용처럼 array2가 array1값을 참조하게 된다.
알겠어.. 그럼 도대체 array2는 값을 언제 가지는건데?
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/015.gif)
그것은 바로! array2의 값에 대해 첫 수정이 일어날 때 메모리에 할당된다.
와.. 공부할 수록 무언가 계속 배워갈게 생긴다.. 재밌다. 하하하
하... 프로그래밍 쉽지않다.
🐂🐂🐂🐂🐂🐂🐂🐂🐂🐂🐂🐂🐂
'Swift' 카테고리의 다른 글
Swift Optional (0) | 2024.06.28 |
---|---|
Swift LifeCycle - 추가 예정 (미완) (1) | 2024.06.26 |
Swift preview (0) | 2024.06.25 |
Swift Lint란? (0) | 2024.06.24 |
NSExpression Class (0) | 2024.06.23 |