Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 구조체 vs C++ 구조체, 핵심 차이점 총정리

C 언어와 C++ 언어에서의 구조체(structure)는 이름은 같지만 그 성격과 기능에서 상당한 차이를 보입니다. 특히 C++의 구조체는 클래스(class)와 거의 유사하게 동작하기 때문에, 두 언어의 구조체 차이를 정확히 이해하는 것이 중요합니다.

C 구조체와 C++ 구조체의 가장 큰 차이

가장 대표적인 차이점은 접근 제어입니다. C 언어의 구조체는 모든 멤버가 기본적으로 public으로 공개되지만, C++의 구조체는 멤버가 기본적으로 private으로 설정됩니다. 이 외에도 아래 표에서 확인할 수 있듯이 여러 가지 차이점이 존재합니다.

C 구조체C++ 구조체
구조체 내부에 멤버 함수를 포함할 수 없습니다.멤버 변수와 함께 멤버 함수를 포함할 수 있습니다.
구조체 데이터를 직접 초기화할 수 없습니다.구조체 데이터를 직접 초기화할 수 있습니다.
구조체 타입 변수를 선언할 때 'struct' 키워드를 반드시 작성해야 합니다.변수 선언 시 'struct' 키워드를 사용할 필요가 없습니다.
static 멤버를 가질 수 없습니다.static 멤버를 가질 수 있습니다.
빈 구조체에 sizeof 연산자를 적용하면 0을 반환합니다.빈 구조체에 sizeof 연산자를 적용하면 1을 반환합니다.
데이터 은닉(data hiding) 기능을 지원하지 않습니다.데이터 은닉 기능을 지원합니다.
접근 제한자(access modifier)가 없습니다.접근 지정자(access specifier)를 사용할 수 있습니다.

주요 차이점 상세 설명

1. 멤버 함수 포함 여부

C 구조체는 순수하게 데이터만 담는 컨테이너 역할을 하므로 구조체 안에 함수를 정의할 수 없습니다. 반면 C++ 구조체는 클래스처럼 멤버 함수를 포함할 수 있어, 데이터와 이를 처리하는 로직을 하나로 묶을 수 있습니다.

2. 직접 초기화 가능 여부

C에서는 구조체 선언과 동시에 멤버 값을 직접 초기화할 수 없으며, 별도의 대입 과정이 필요합니다. 하지만 C++에서는 생성자를 활용하거나 선언 시점에 멤버를 바로 초기화할 수 있습니다.

3. struct 키워드 생략 가능 여부

C 언어에서는 구조체 변수를 선언할 때마다 'struct' 키워드를 명시해야 하지만, C++에서는 구조체 이름 자체가 하나의 독립적인 타입으로 간주되므로 키워드 없이 변수를 선언할 수 있습니다.

4. static 멤버와 데이터 은닉

C++ 구조체는 static 멤버 변수와 함수를 가질 수 있으며, 접근 지정자(public, private, protected)를 활용한 데이터 은닉이 가능합니다. 반면 C 구조체에는 이러한 객체지향적 기능이 전혀 없습니다.

5. 빈 구조체의 sizeof 결과

C에서 크기가 0인 빈 구조체에 sizeof를 적용하면 0이 반환됩니다. 반면 C++에서는 각 객체의 고유성을 보장하기 위해 최소 1바이트를 할당하므로 1이 반환됩니다.

정리

결론적으로 C의 구조체는 단순히 관련된 데이터를 묶어주는 자료형에 불과하지만, C++의 구조체는 클래스와 거의 동일한 기능을 수행하는 객체지향적 요소입니다. 따라서 C++에서 구조체를 사용할 때는 멤버의 기본 접근 수준이 private이라는 점을 항상 유의해야 합니다.