공부/기타

얕은 복사(shallow copy)와 깊은 복사(deep copy)의 개념 및 차이점

셩잇님 2023. 1. 31. 22:41
반응형

 

 

1. 얕은 복사(shallow copy)

얕은 복사(shallow copy)는 객체 자체가 아닌 객체에 대한 참조만 복사되는 개체 복사 방법입니다. 얕은 복사(shallow copy)를 통해 생성된 객체의 복사본은 새 메모리 주소로 새 객체를 생성하는 것이 아니라 원본 객체와 메모리의 동일한 객체를 가리킵니다. 즉, 복사본을 통해 개체를 변경하면 원래 개체에 영향을 미치고 그 반대도 마찬가지입니다.

C++에서 얕은 복사(shallow copy)는 객체 복사의 기본 동작입니다. 할당 연산자(=)를 사용하여 객체를 다른 객체에 할당하면 객체의 단순 복사본이 만들어집니다. 복사본과 원본 객체는 동일한 데이터 멤버를 공유합니다. 즉, 객체 중 하나를 통해 데이터 멤버에 대한 모든 변경 사항이 다른 객체에 반영됩니다.

얕은 복사(shallow copy)는 일반적으로 동적으로 할당된 메모리를 소유하는 객체나 복잡한 내부 구조를 가진 객체에 권장되지 않습니다. 의도하지 않은 동작과 메모리 누수가 발생할 수 있기 때문입니다. 이러한 경우 일반적으로 원본 개체와 메모리를 공유하는 것보다 자체 메모리로 새 개체를 만드는 전체 복사를 수행하는 것이 좋습니다.

 

2. 깊은 복사(deep copy)

깊은 복사(deep copy)는 하위 객체를 포함하여 객체의 독립적인 복제본을 만들고 복제본의 모든 요소 값을 보존하는 프로세스입니다. 내용을 복사하지 않고 객체에 대한 새 참조를 만드는 얕은 복사(shallow copy)와 달리 깊은 복사(deep copy)는 내용에 대한 별도의 메모리 할당을 통해 완전히 새로운 개체를 만듭니다.

이는 원본 데이터를 보존하고 복사본을 수정할 때 원본 개체의 변경을 방지하는 데 유용합니다. 이것은 원래 객체가 복잡한 데이터 구조의 일부이거나 객체가 튜플이나 문자열과 같은 불변 데이터 유형인 경우에 일반적으로 사용됩니다.

 

3. 얕은 복사(shallow copy)와 깊은 복사(deep copy)의 차이점

얕은 복사(shallow copy)는 객체에 대한 새 참조가 생성되지만 객체의 내용은 복제되지 않는 복사 기술입니다. 대신 새 참조는 원본과 동일한 객체를 참조합니다. 즉, 원본 객체가 수정되면 변경 사항이 원본 객체와 얕은 복사본 객체 모두에게 반영됩니다.

대조적으로 깊은 복사(deep copy)는 각 요소에 대해 별도의 메모리 할당을 사용하여 모든 하위 개체를 포함하여 개체의 완전히 독립적인 복제본을 만듭니다. 즉, 깊은 복사(deep copy)에 대한 변경 사항은 원본 객체에 영향을 미치지 않으며 그 반대의 경우도 마찬가지입니다.

간단히 말해서 얕은 복사(shallow copy)는 동일한 개체에 대한 새 참조를 만드는 반면, 깊은 복사(deep copy)는 자체 메모리 할당을 사용하여 새 객체를 만듭니다.

 

 

 

반응형