C++ 구조체 vs 클래스: 핵심 차이, 문법, 최적 사용 사례
구조체(Structure)란?
구조체(struct)는 int, float, char 등 서로 다른 타입의 연관 데이터 멤버를 단일 복합 타입으로 묶는 사용자 정의 데이터 타입. 모든 멤버가 메모리에 연속 배치돼 경량 데이터 컨테이너에 이상적.
클래스(Class)란?
클래스는 C++ 객체지향 프로그래밍 초석. 객체 청사진 정의, 데이터(멤버 변수)와 행동(멤버 함수) 명시. 클래스는 데이터와 함수 캡슐화해 추상화, 캡슐화, 상속, 다형성 메커니즘 제공.
C++ 클래스 문법
표준 문법:
class ClassName { // member variables // member functions };
접근 지정자 명시 없으면 멤버 기본 private.
C++ 구조체 문법
구조체도 유사 문법, 키워드 struct 사용, 멤버 기본 public:
struct StructName { // data members };
구조체와 클래스 핵심 차이

| 특징 | 구조체 | 클래스 |
| 정의 | 논리적 관련 데이터용 사용자 정의 복합 타입. | 데이터와 행동 아우르는 객체 청사진. |
| 키워드 | struct | class |
| 기본 접근 | Public | Private |
| 타입 의미 | 값 타입(기본 스택 할당). | 참조 타입(new 사용 시 힙 할당). |
| 상속 | 불가(C++11부터 허용이나 의미 다름). | 완전 지원; 클래스 간 상속 가능. |
| 생성자/소멸자 | 기본 생성자만; 소멸자 미지원. | 사용자 정의 생성자·소멸자 허용. |
| 추상/가상 함수 | 불가. | 지원; 다형성 구현. |
| 널 가능성 | 널 불가. | 널 가능(클래스 포인터는 널 가능). |
| 사용 맥락 | 작고 가벼운 데이터 구조에 이상적. | OOP 기능 혜택 보는 크고 복잡한 객체에 적합. |
구조체와 클래스 선택 기준
광범위한 데이터 캡슐화, 상속, 다형성 필요하면 class가 정답. 반대로 값 전달 효율적인 경량 POD 계열 컨테이너 필요하면 struct로 충분.
핵심 요약
- 구조체: 이종 데이터를 단일 값 타입으로 그룹화.
- 클래스: 데이터와 행동 캡슐화, OOP 원칙 지원.
- 구조체 기본 public, 클래스 기본 private.
- 사용자 정의 생성자·소멸자·가상 함수는 클래스만 허용.
- 단순 스택 할당 데이터는 구조체, 복잡한 힙 할당 객체는 클래스 사용.