“복사 의미론(Copy Semantics)”은 C++ 같은 시스템 프로그래밍 언어에서 객체가 복사될 때 어떤 일이 일어나는지에 대한 규칙과 의미를 말합니다. 특히 값(value) 기반의 객체 전달이 기본인 C++에서는 이 개념이 매우 중요합니다.


복사 의미론(Copy Semantics)이란?

복사 의미론이란 객체가 복사될 때 다음 두 가지가 어떻게 작동하는지를 설명하는 체계입니다:

  1. 복사 생성자(Copy Constructor)
  2. 복사 대입 연산자(Copy Assignment Operator)

이 두 함수를 통해 “얕은 복사” vs “깊은 복사” 여부가 결정되고, 객체 복사의 의미가 정의됩니다. 관련 코드 예시


class MyClass {
public:
    int* data;

    // 복사 생성자
    MyClass(const MyClass& other) {
        data = new int(*other.data);  // 깊은 복사
    }

    // 복사 대입 연산자
    MyClass& operator=(const MyClass& other) {
        if (this != &other) {
            delete data;               // 기존 자원 해제
            data = new int(*other.data); // 깊은 복사
        }
        return *this;
    }

    ~MyClass() {
        delete data;
    }
};

복사 의미론의 목적

목적 설명
자원 안전성(Resource Safety) 포인터/동적 메모리 등 자원이 복사될 때 메모리 누수/중복 해제를 방지
명확한 객체 행동 정의 객체가 함수로 전달될 때, 리턴될 때 어떤 방식으로 복사되는지 결정
사용자 정의 복사 클래스 내부에 포인터가 있을 경우 얕은 복사로 인한 버그 방지 Copy vs Move Semantics (비교)

개념 복사(Copy) 이동(Move)
목적 값을 복제 값을 이전
주요 함수 Copy Constructor, Copy Assignment Move Constructor, Move Assignment
성능 느림 (자원 복제) 빠름 (자원 이전)
사용 시점 일반 객체 전달 임시 객체, rvalue 처리 시 최적화

복사 의미론이 중요한 이유