깊은 복사 vs 얕은 복사

1. 깊은 복사 (Deep Copy)

깊은 복사는 객체의 모든 멤버 데이터를 새로 복사하여 두 객체가 서로 독립적인 상태를 유지하도록 한다.

  • 주요 특징:
    • 새로운 메모리 공간을 할당하여 복사.
    • 원본 객체와 복사된 객체의 수명이 독립적.
    • 동적 메모리를 사용하는 경우 유용.
// 복사 생성자 예제
MyClass(const MyClass& other) {
    data = new int(*(other.data)); // 새로운 메모리 할당 후 복사
}


2. 얕은 복사 (Shallow Copy)

얕은 복사는 객체의 멤버 데이터를 그대로 복사하되, 포인터가 같은 메모리를 참조하도록 한다.

  • 주요 특징:
    • 메모리 공간을 새로 할당하지 않음.
    • 복사된 객체와 원본 객체가 같은 메모리를 참조 (수명 공유).
    • 하나의 객체가 메모리를 해제하면 다른 객체가 이를 참조하려다 문제가 발생할 수 있음.
// 얕은 복사 예제
MyClass(const MyClass& other) {
    data = other.data; // 포인터 주소만 복사
}


3. 깊은 복사와 얕은 복사의 차이점

구분 깊은 복사 얕은 복사
메모리 사용 별도의 메모리 할당 메모리 공유
객체 간 독립성 복사된 객체와 원본 객체가 독립적 복사된 객체와 원본 객체가 종속적
위험성 안전 메모리 이중 해제 등의 위험성 존재