이 글에서는 C++의 트리비얼(trivial) 클래스가 무엇인지, 그리고 실제로 어떻게 정의하고 활용하는지 예제와 함께 살펴보겠습니다.
트리비얼 클래스란?
C++에서 클래스나 구조체가 특별한 초기화 로직 없이 컴파일러가 제공하는 기본 동작을 그대로 사용할 때, 이를 트리비얼 클래스라고 부릅니다. 즉, 클래스 내부에 명시적으로 = default로 지정된 기본 생성자 등을 포함하고 있으며, 컴파일러가 자동으로 생성해 주는 생성자, 대입 연산자, 소멸자를 그대로 사용합니다.
트리비얼 클래스의 주요 특징은 다음과 같습니다.
- 기본 생성자, 복사·이동 생성자, 대입 연산자, 소멸자가 모두 트리비얼하게 동작함
- 가상 함수(virtual function)나 가상 기반 클래스(virtual base class)를 포함하지 않음
memcpy같은 단순 메모리 복사 방식으로도 객체를 안전하게 복제할 수 있어 성능 면에서 유리함
예제 코드
// 기본 생성자를 그대로 사용하는 경우
struct Trivial {
int i;
private:
int j;
};
// 매개변수가 있는 생성자를 직접 정의한 뒤,
// 기본 생성자를 default로 명시하는 경우
struct Trivial2 {
int i;
Trivial2(int a, int b){
i = a;
}
Trivial2() = default;
};
첫 번째 구조체 Trivial은 아무런 생성자도 직접 정의하지 않았기 때문에 컴파일러가 제공하는 기본 생성자를 사용하며, 트리비얼 클래스의 전형적인 예입니다. 두 번째 구조체 Trivial2는 매개변수가 있는 생성자를 직접 정의하면서도, Trivial2() = default; 구문을 통해 기본 생성자를 명시적으로 디폴트로 지정했습니다. 이처럼 = default 키워드를 활용하면 컴파일러의 기본 구현을 유지하면서 필요한 생성자만 추가로 정의할 수 있습니다.
실행 결과
(클래스를 정의만 하고 객체 인스턴스를 생성하지 않았으므로 별도의 출력 결과가 없습니다.)
위 예제는 클래스 선언부만 포함하고 있고 실제 객체를 생성하거나 멤버 함수를 호출하지 않기 때문에 화면에 출력되는 결과는 없습니다. 실제 동작을 확인하려면 main() 함수에서 객체를 생성하고 멤버 변수 값을 출력하는 코드를 추가하면 됩니다.