메모리·ARC
깊은 복사·얕은 복사와 COW
Swift에서 var b = a로 큰 배열을 다른 변수에 대입한 뒤 b만 수정했습니다. 이때 일어나는 것이 얕은 복사인지 깊은 복사인지, Copy-on-Write와 함께 설명해 주세요.
면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
Swift에서 var b = a로 큰 배열을 다른 변수에 대입한 뒤 b만 수정했습니다. 이때 일어나는 것이 얕은 복사인지 깊은 복사인지, Copy-on-Write와 함께 설명해 주세요.
대입 순간에는 두 변수가 같은 힙 버퍼를 가리키는 얕은 복사만 일어나고, b를 수정하는 첫 순간에 버퍼가 유일하게 참조되는지 확인해서 아니면 그때서야 통째로 복사한 뒤 쓴다. 이것이 Copy-on-Write이고, 요소가 class라면 복사된 버퍼 안의 참조는 여전히 원래 인스턴스를 그대로 가리키므로 완전한 사본은 아니다.
메모리·ARC주관식심화
… s2.a = 9 이후 s1.a·s2.a가 저장된 주소와 tags 배열의 버퍼 주소는 각각 같은가요, 다른가요?
#copy #cow
Swift 언어주관식딥다이브
대용량 픽셀 버퍼를 감싸는 struct ImageBuffer를 만들어야 합니다. 값 의미론은 유지하면서 불필요한 복사를 피하고 싶습니다…
#cow #value-semantics
메모리·ARC객관식기초
Objective-C 코드에서 @property (nonatomic, copy) NSString *name;처럼 NSString 프로퍼티에 strong 대신…
#copy
메모리·ARC주관식심화
"struct를 쓰면 ARC 비용이 없다"는 말은 어디까지 사실인가요?
#cow