“복사 의미론(Copy Semantics)”은 C++ 같은 시스템 프로그래밍 언어에서 객체가 복사될 때 어떤 일이 일어나는지에 대한 규칙과 의미를 말합니다. 특히 값(value) 기반의 객체 전달이 기본인 C++에서는 이 개념이 매우 중요합니다.
복사 의미론이란 객체가 복사될 때 다음 두 가지가 어떻게 작동하는지를 설명하는 체계입니다:
이 두 함수를 통해 “얕은 복사” 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 처리 시 최적화 |