Daily iOS
메모리·ARC

깊은 복사·얕은 복사와 COW

Swift에서 var b = a로 큰 배열을 다른 변수에 대입한 뒤 b만 수정했습니다. 이때 일어나는 것이 얕은 복사인지 깊은 복사인지, Copy-on-Write와 함께 설명해 주세요.

면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
짧은 답 보기

대입 순간에는 두 변수가 같은 힙 버퍼를 가리키는 얕은 복사만 일어나고, b를 수정하는 첫 순간에 버퍼가 유일하게 참조되는지 확인해서 아니면 그때서야 통째로 복사한 뒤 쓴다. 이것이 Copy-on-Write이고, 요소가 class라면 복사된 버퍼 안의 참조는 여전히 원래 인스턴스를 그대로 가리키므로 완전한 사본은 아니다.

받은 질문 공유