Shallow Copy & Deep Copy*

이재홍·2022년 6월 28일
0

원시값 : Number, String, Boolean, Null, Undefined
참조값 : Object, Symbol

Value and Reference type

모든 데이터 타입은 값 타입(value type) 또는 참조 타입(reference type)을 가진다.

값 타입(Value type) : 각각의 고유의 메모리를 소유한다. 스위프트에서 struct, enum, array, tuples 들이 해당 타입에 속한다.
참조 타입(Reference type) : 생성된 인스턴스들은 주소값을 공유한다. 스위프트에서 class가 해당 타입에 속한다.

두 가지 타입 모두 copy 메소드가 존재하는데 과연 깊은 복사(deep copy)가 일어날까? 아니면 얕은 복사(shallow copy)가 일어날까?


깊은 복사(Deep copy)란?

데이터 자체를 통째로 복사한다.
복사된 두 객체는 완전히 독립적인 메모리를 차지한다.
value type의 객체들은 깊은 복사를 하게 된다.


얕은 복사(Shallow copy)란?

얕은 복사는 아주 최소한만 복사를 한다. 값을 복사한다 하더라도, 인스턴스가 메모리에 새로 생성되지 않는다. 값 자체를 복사하는 것이 아니라 주소값을 복사하여 같은 메모리를 가리키기 때문이다.

새로운 인스턴스를 생성하지 않기 때문에 깊은 복사보다 상대적으로 빠르다. reference type을 복사하는 경우 얕은 복사가 일어난다.

0개의 댓글