8-3 COW

STONE·2024년 12월 11일

Swift_Ios

목록 보기
27/44

주제

COW

COW는 Copy-on-Write의 약자로 객체나 값이 변경될 때까지 데이터를 복사하지 않고 지연시켜서 성능을 최적화하는 기법이다. 주로 값 타입(struct, enum)에서 사용되며, Array, Dictionary, Set등의 컬렉션 타입에서 이를 구현하여 데이터 복사를 최소화 한다

COW를 이해하기 위한 개념

  1. 값 타입과 참조 타입의 차이 : 값 타입은 복사될 때 실제 값이 복사되며, 참조 타입은 메모리 주소를 공유한다. struct, enum은 값 타입이고 class는 참조 타입이다
  2. COW의 동작
    읽기: 값이 변경되지 않으면, 복사가 일어나지 않고 해당 값이 공유된다
    쓰기: 값이 변경되면, 복사가 이루어져 독립적인 값으로 수정된다.
  3. Swift에서 COW 사용 예시
    이 컬렉션 타입들은 내부적으로 cow를 사용하여, 값이 변경되지 않는 한 참조를 공유한다

예시 코드

// arr1, arr2는 처음에 동일한 메모리를 공유한다.
// 그러나 arr2의 값을 수정하게 되면 cow가 동작하여 arr1은 유지 되고 arr2는 복사본을 사용하게 된다

var arr1 = [1, 2, 3]
var arr2 = arr1 // arr1을 arr2에 복사
arr2[0] = 100 // arr2의 첫 번째 값을 수정

print(arr1) // [1, 2, 3]
print(arr2) // [100, 2, 3]

정리

COW는 성능 최적화의 중요한 기법으로, 필요한 때만 복사를 수행하고 불필요한 복사를 피하는 방식이다

profile
흠...?

0개의 댓글