CS Interview

Deep Copy vs Shallow Copy, 얕은 복사와 깊은 복사

게임이 더 좋아 2021. 9. 1. 21:38
반응형
728x170

 

같은 복사지만 다른 복사인 2가지 알아보자

여기서는 객체, Object의 복사를 뜻한다.

 

대체적으로 

얕은 복사는 객체의 참조값을 복사하고

깊은 복사는 객체의 값을 복사한다고

알려져있다.

 

즉, Reference vs value의 차이라는 얘기다.

 

 

C++에서는 조금 다르게 설명한다.

 

다시 조금 더 자세히 설명하면

객체에 대해서 얕은 복사는 모든 멤버 필드 값들을 복사하는 것이다.

필드 자체가 값일 경우 동작하지만

동적으로 할당된 메모리를 가리키는 포인터의 경우 그렇지 않을 수 있다.

때문에 포인터는 복사되지만 포인터가 가리키는 메모리는 복사되지 않기 때문에

원래 필드의 객체와 복사본 두가지 모두 동적으로 할당된 메모리를 가리키게 된다.

**C++ 에서 디폴트로 되어있는 복사 생성자와 할당 연산자는 얕은 복사이다.

 


 

 

깊은 복사는 그 반면에

모든 필드와 필드가 가리키는 동적으로 할당된 메모리를 복사하는 것이다. (포인터 복사x)

새로운 주소에 복사한다고 생각하면 된다.

 

즉, 깊은 복사를 하기 위해서는 복사 생성자를 작성하고 할당을 다시 해주어야 한다.

그렇지 않은 경우 원본을 가리키게 된다.

728x90
반응형
그리드형