seong_hye, the developer

Swift) 문법 정리 - COW(Copy-On-Write) 본문

IOS

Swift) 문법 정리 - COW(Copy-On-Write)

seong_hye 2022. 8. 2.

 

swif에는 저희가 인지하지 못하고 사용하고 있는 여러 프로그래밍 기술들이 있죠

오늘은 그 중에서 COW(Copy-On-Wirte)에 대해 알아보려고 합니다.  


COW(Copy-On-Write)

컴퓨터에서 복사할 때 값을 복사해서 담는다 하더라도,

실제 값이 바뀌기 전까지는 그냥 하나의 메모리 값을 공유해서 사용

원본이나 복사본에서 수정이 일어나면 그 때 값을 복사하는 것

 

중요한 이유?

  값을 사용하는 방법 중 하나인

값 타입은 새로운 변수를 할당하거나 파라미터로 전달될 때 값 복사가 일어나는  것을 의미

하지만 이러한 복사 작업은 상당한 시간이 걸리므로 이런 작업을 최적화 하기 위한 기술이 COW이다.

 

사용 용도

메모리 공간이 큰 데이터를 다룰 경우

수정이 없는데 복사를 한다는 것은 메모리 낭비가 될 수 있음

실제 수정이 이뤄질 때 데이터 복사를 하고 

사용하기 전에는 참조를 통해  불필요한 복사 를 줄이고 메모리 낭비를 막기 위함


 

예시 코드

Array

var array = [1, 2, 3]
var array2 = array
address(of: array) //0x06ace3ec32
address(of: array2) //0x06ace3ec32

array2.append(2)
address(of: array) //0x06ace3ec32
address(of: array2) //0x06ace3ec39

 

하지만  Dictionary, Set, String에서는 값 복사부터 값이 다르게 나왔다..


//Dictionary
var dic1 = ["1" : 2023, "2" : 2024]
var dic2 = dic1
address(of: &dic1) //0x06ace3ec12
address(of: &dic2) //0x06ace3ec16
​
//Set
var set1: Set = [1, 2, 3, 4, 5]
var set2 = set1
address(of: &set1) //0x06ace3ee41
address(of: &set2) //0x06ace3ee46

//String
var string = "abcdefghijklmnop"
var string2 = string
address(of: &string) //0x06ace3er21
address(of: &string2) //0x06ace3er25

 

공식문서에서 collection type과 string에 COW가 구현되어있다고 적혀있음에도

안되는 이유가 무엇일까 계속해서 탐색해보았다..

 

func address(of object: UnsafeRawPointer) -> String

검색해서 사용한 함수가 Array에 대해서는 같은 값을, 

String에 대해서는 다른 값을 return 하는 이유는 아래와 같다고 합니다.

  • unsafe pointer를 인자로 받는 함수에 array를 전달하는 것은 첫번째 어레이 인자의 주소를 전달하는 것입니다. 따라서 array들이 같은 저장공간을 사용한다면 동일한 값이 나오게 됩니다.
  • unsafe pointer를 인자로 받는 함수에 string을 전달하는 것은 string을 나타내는 임시 UTF-8 의 pointer를 전달하는 것입니다. 따라서 이 주소는 같은 string일지라도 매 호출마다 달라질 수 있습니다.

메모리의 세계는 너무 어렵네요... 조금 더 공부가 필요한 부분인 것 같습니다.

그래도 collection type과 string에 COW가 구현되어있다고 하고

COW에 대해 이해할 수 있는 시간이였습니다~~

 

 

참고 블로그)

https://forestjae.tistory.com/30

https://sujinnaljin.medium.com/swift-value-type%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%A3%BC%EC%86%8C-7d4c3de73b11

Comments