[iOS-CS-interview] Copy On Write는 어떤 방식으로 동작하는지 설명하시오.

Jenny·2023년 9월 13일
0

Swift 에서 Value Type or Reference Type Copy 방식

  • Deep Copy(깊은 복사)
    • 데이터를 그대로 복사하며, 복사된 두 객체는 각각의 메모리를 가지게 된다. 즉 독립적인 객체가 된다.
    • 기본적으로 Value Type의 객체들을 생성하면 Deep Copy로 이루어 지게 된다.
  • Shallow Copy(얕은 복사)
    • 데이터를 복사해도 인스턴스의 메모리가 생성되는 것이 아닌 값의 주소를 복사하여 같은 값을 가르치게 된다.
    • 기본적으로 Reference Type 객체들을 생성하면 Shallow Copy로 이루어 지게 된다.
  • NSCopying
    • Copy()을 사용하여 Reference Type 에서도 Deep Copy를 가능하게 해주는 Protocol이 있다.

Copy - On - Write에 대해

  • Copy - On - Write는 Swift 자체 기능이라기 보다 컴퓨터 프로그래밍에서 사용되는 리소스 관리 기법이다.
    • Copy - On - Write는 메모리 할당과 해체를 최적화 하는 기법중 하나이며, Swift의 Collection Type들(String, Array, Set, Dictionary)에서 Copy - On - Write가 동작 한다.
    • Custom Value Types 같은 경우 Copy - On - Write가 구현되어 있지 않기 때문에 직접 구현 해야 한다.
    • Copy - On - Write는 Deep CopyShallow Copy의 장점을 모두 가지고 있는 기능이다.

Copy - On - Write의 장점

  • Copy - On - Write는 복사 시에 실제로 값을 복사하지 않고 동일한 값을 참조 하고 있다가 수정(Write)가 발생 하면 그 때 값을 복사해 변경을 적용하기에 메모리 낭비를 줄일 수 있을 뿐만 아니라 오버헤드의 문제점을 해결할 수 있다.
  • Copy - On - Write는 특별한 코드를 작성하지 않고 동작하기에 사용하기가 쉽다.

Copy - On - Write의 단점

  • 사용자 지정 Value Types 뿐만 아닌 Reference Types 에는 Copy - On - Write를 지원하지 않기에 직접 구현해야 한다.
  • 데이터가 자주 수정되는 경우 메모리 공간을 할당하여 복사하기에 불필요한 메모리 낭비와 오버헤드를 부를 수 있기 때문에 설계에 마쳐서 구현을 해 나가야 한다.

Copy - On - Write 같은 경우 Collection Type 뿐만이 아닌 Data, URL 등에 몇몇 자료형에서도 Copy - On - Write가 지원이 된다.
Standard Library 에서는 Copy - On - Write 동작 하지 않으며, String 같은 경우에는 Copy - On - Write 가 지원 되지만 글자수가 15 글자를 초과해야
Copy - On - Write가 동작 하며, appendingMethod 를 사용하면
Copy - On - Write 동작 하지 않고 서로 같은 주소를 바라 보는 것을 확인 할 수 있다.

📝 참고 사이트

profile
"Jenny 있게 iOS 개발을 하며 대체 불가능한 인재가 되자"

0개의 댓글