iOS/Swift 상식

Swift - Copy On Write(COW) 동작 방식

HJ39 2023. 1. 23. 19:58

Copy on Write를 알아보기 전에 학교에서 C언어를 배울 때 지겹도록(?) 들었던

Call-by-Value

Call-by-Reference

위 두 가지를 복습 차원으로 알아보자

 

Call-by-Value

영어 뜻을 직역으로 해석하자면 값의 호출인데 느낌 상 알 수 있듯이 값을 호출할 때 데이터를 복사하여 호출한다는 것이다.

예를 들어

int a = 1;
int b = a;

b = 3;

printf("%d",a);	// 1
printf("%d",b);	// 3

다음과 같이 호출한다면 변수 a에 1을 메모리에 저장하고 그 값을 b에 저장하는 경우 같은 공간을 가리키는 것이 아닌 메모리에 새로운 공간을 할당하여 값을 복사하게 된다. 

따라서 b의 값을 3으로 변경하게 되면 b의 값은 3으로 변경되지만 a의 값은 다른 메모리 공간이므로 변경되지 않으므로 1이 그대로 있게 된다.

 

Call-by-Reference

Reference는 참조한다는 의미이다. 따라서 직역을 하면 참조에 의해 호출이다.

위 값의 호출과 다르게 데이터를 새롭게 할당하여 사용하는 것이 아닌 같은 메모리 공간을 공유하게 사용하게 된다.

예를 들면

int a = 1;
int *b = &a;

*b = 3;

printf("%d",a);		// 3
printf("%d",*b);	// 3

변수 a에 1을 저장하면 메모리에 새로운 공간이 할당되어 1을 저장한다.

포인터 변수 b를 a의 주소값을 참조하게 하면 b는 메모리에 a의 주소값을 저장하게 된다.

따라서 *b의 값을 참조하여 변경하게 되면 a의 공간이 변경된다. 

 

그래서 Copy on Write는 무엇인가?!

 

Call-by-Reference과 Call-by-Value를 반씩 섞은 기능이다.

Copy on Write

데이터를 복사할 때마다 Call-by-Reference처럼 값을 참조하고 값이 변경되면 그때 Call-by-Value처럼 데이터를 복사하게 된다.

 

쉽죠..?

 

# 참고한 사이트

  1. https://velog.io/@loinsir/Swift-Copy-On-Write-COW

'iOS > Swift 상식' 카테고리의 다른 글

Swift - Any vs AnyObject  (0) 2023.01.23
Swift - Convenience init  (0) 2023.01.23
Swift - Class 성능 향상 시키는 방법  (0) 2023.01.07
iOS - Storyboard vs Code  (0) 2023.01.07
Swift - Class vs Struct  (0) 2022.12.31