struct Base {
Base() { std::cout << "Base constructor\n"; }
virtual ~Base() { std::cout << "Base destructor\n"; }
};
→ Base라는 이름의 struct를 정의하고, 해당 구조체에 기본 생성자와 가상 소멸자를 선언 및 정의하였다.
C++에서 struct는 사용자 정의 자료형으로, 여러 변수(멤버)를 하나로 묶을 수 있다. class와 거의 동일하지만, 기본 접근 지정자가 public이라는 차이점이 있다. 멤버 변수와 함수, 생성자, 소멸자 등도 포함할 수 있다. 상속과 다형성도 지원한다. 주로 간단한 데이터 구조를 정의할 때 사용된다.
| 구분 | struct | class |
|---|---|---|
| 기본 접근 지정자 | public | private |
| 사용 목적 | 주로 데이터 구조 표현 | 주로 객체지향 프로그래밍 |
| 상속 기본 지정자 | public | private |
| 문법 구조 | class와 동일 | struct와 동일 |
| 특징 | 간단한 구조체에 주로 사용 | 캡슐화와 추상화 중심의 설계 |
C++에서 class와 struct는 기능적으로 거의 동일하기 때문에, 둘 중 하나만 사용해도 대부분의 경우 문제가 없다. 하지만 struct가 특별히 유용한 상황도 존재한다.
| 상황 | 설명 |
|---|---|
| Plain Data 구조 | 멤버가 모두 public이고, 단순히 데이터를 담기 위한 용도일 때 (struct가 더 직관적) |
| C 언어 호환성 | C와의 인터페이스에서 struct를 그대로 사용해야 하는 경우 |
| 연산자 오버로드 없이 데이터 묶기 | 예: Point { int x, y; }, RGB { uint8_t r, g, b; } 등 단순 자료형 묶음 |
| 헤더에서 공개 데이터용 | 외부 라이브러리에 전달할 단순 데이터 포맷 정의용으로 적합 |
| 초보자 가독성 향상 | struct는 기본 접근 지정자가 public이므로 초보자 입장에서 더 명확할 수 있음 |
복잡한 클래스 설계(캡슐화, 상속, 다형성 등)를 한다면 class를 쓰는 것이 좋고, 단순한 데이터 컨테이너나 POD(Plain Old Data) 구조체라면 struct가 더 간결하고 가독성이 좋다.