값 타입에 대한 글을 읽다가 CoW에 대해 언급하는 걸 봤어요
사실 이전에도 종종 들었는데 흠 이런게 있군... 하고 넘겼거든요
이번에는 뭔지 한 번 확인해보겠습니다
🩵 Copy on Write
수정 가능한 리소스에 대한 복사 작업을 효율적으로 구현하기 위해 사용되는 리소스 관리 기술
사전적 정의를 보고 있으면 뭔소리임? 싶지만
생각보다 단순하더라구요
아주 큰 Value Type 유형을 전부 복사한다고 가정해볼게요
이런 경우 아마도 데이터의 크기만큼 거대한 리소스가 들어갈 겁니다
"모든 데이터"를 "복사"해야 하기 때문이죠
이런 불상사를 막기 위해서
값 타입이어도 변경이 일어나지 않았다면 단순히 원본 데이터를 참조만 하고 있다가
값이 변경되는 시점에 메모리를 복사한 다음, 수정한다는 소리입니다
좀 더 깔끔히 적어보자면
실제로 데이터가 변경될 필요가 있을 때까지 데이터의 복사본을 생성하지 않는다.
불필요한 데이터 복사를 피하고 성능을 향상시킬 수 있다.
생각보다 간단하죠?
🩵 Swift의 CoW
스위프트에서는 어떤 곳에서 CoW 방식을 사용하고 있을까요?
대표적으로 Array, Set, Dictionary, String 입니다
✔️ Array 예시
배열.. 구조체 타입인 거 아시죠?
사용자가 직접 만든 구조체에는 적용되지 않는다는 점만 기억하면 좋을 것 같습니다~
값 타입의 복사 시 필요한 시점까지 메모리 복사를 미뤄주는 CoW!
앞으로는 이런것도 생각해보면서 불필요한 복사를 줄이는 방향으로 개발을 하면 좋을 것 같아요ㅎㅎ
https://developer.apple.com/documentation/swift/withunsafepointer(to:_:)-1wfum
https://medium.com/@lucianoalmeida1/understanding-swift-copy-on-write-mechanisms-52ac31d68f2f
https://sunny-maneg.tistory.com/entry/swift-Copy-On-Write-COW
'iOS > Swift' 카테고리의 다른 글
[Swift] static / class 키워드 (0) | 2024.03.18 |
---|---|
[Swift] Unit Test (2) 유닛 테스트 시작하기 (0) | 2024.03.07 |
[Swift]Unit Test (1) 코드 테스트의 원칙 (0) | 2024.03.06 |
[Swift] 열거형 Enumeration / 타입 안정성 (0) | 2024.03.04 |
[Swift] iOS 알림 설정 허용받기 - User Notifications (0) | 2024.03.02 |