이 글에서는 C 언어의 구조체와 C++의 구조체 사이의 차이점을 살펴보겠습니다. C++의 구조체는 기본적으로 C++의 클래스와 매우 유사하게 동작합니다. C 구조체에서는 모든 멤버가 기본적으로 public으로 선언되지만, C++ 구조체에서는 기본적으로 private으로 설정됩니다. 그 외의 주요 차이점들을 아래에서 자세히 확인해 보세요.
C 구조체 vs C++ 구조체 핵심 차이점
| C 구조체 | C++ 구조체 |
|---|---|
| 구조체 내부에 멤버 함수를 가질 수 없습니다. | 멤버 변수와 함께 멤버 함수를 포함할 수 있습니다. |
| 구조체 데이터를 직접 초기화할 수 없습니다. | 구조체 데이터를 직접 초기화할 수 있습니다. |
| 구조체 타입 변수를 선언할 때 반드시 'struct' 키워드를 작성해야 합니다. | 변수 선언 시 'struct' 키워드를 생략할 수 있습니다. |
| static 멤버를 가질 수 없습니다. | static 멤버를 가질 수 있습니다. |
| sizeof 연산자는 빈 구조체에 대해 0을 반환합니다. | sizeof 연산자는 빈 구조체에 대해 1을 반환합니다. |
| 데이터 은닉(data hiding) 기능을 지원하지 않습니다. | 데이터 은닉 기능을 지원합니다. |
| 접근 제한자(access modifier)가 없습니다. | 접근 지정자(public, private, protected)를 사용할 수 있습니다. |
주요 차이점 상세 설명
1. 멤버 함수 지원 여부
C 구조체는 순수하게 데이터만 묶어놓은 자료형이기 때문에 함수를 포함할 수 없습니다. 반면 C++ 구조체는 클래스처럼 생성자, 소멸자, 일반 멤버 함수까지 모두 정의할 수 있어 객체지향 프로그래밍이 가능합니다.
2. 직접 초기화
C에서는 구조체 변수를 선언하면서 중괄호({})를 이용해 값을 할당하는 방식 외에 직접적인 초기화가 제한적입니다. 하지만 C++에서는 생성자를 통해 구조체 데이터를 자유롭게 초기화할 수 있습니다.
3. struct 키워드 생략
C 언어에서는 구조체 변수를 선언할 때마다 'struct' 키워드를 반복해서 작성해야 하는 번거로움이 있습니다. C++에서는 새로운 타입 이름 자체가 곧 자료형이 되므로 'struct' 키워드 없이 간결하게 선언할 수 있습니다.
4. 빈 구조체의 크기
C에서 sizeof 연산자를 빈 구조체에 적용하면 0이 반환되지만, C++에서는 고유한 주소를 보장하기 위해 최소 1바이트를 반환합니다.
정리
C++ 구조체는 사실상 클래스와 거의 동일한 기능을 제공하며, 유일한 차이점은 기본 접근 지정자가 private이 아닌 public이라는 점입니다. 따라서 단순한 데이터 묶음이 필요하다면 구조체를, 캡슐화와 상속 같은 객체지향 기능이 필요하다면 클래스를 사용하는 것이 일반적인 관행입니다.