C언어에서 C++로 넘어갈 때, 혹은 객체지향 프로그래밍(OOP) 시험에서 100% 확률로 출제되는 단골 문제가 있습니다. 바로 구조체(struct)와 클래스(class)의 차이점입니다.
"C++의 구조체와 클래스는 거의 똑같다는데, 대체 무슨 차이가 있는 걸까?"
궁금하셨던 분들을 위해 핵심 개념부터 시험에 꼭 나오는 핵심 차이점까지 한눈에 정리해 드립니다.
1. C언어 vs C++에서 구조체(struct)의 차이
우선 개념을 잡기 위해 C언어와 C++에서의 구조체가 어떻게 다른지 알아야 합니다.
- C언어의 struct: 오직 '변수(데이터)'들만 묶을 수 있는 사용자 정의 자료형입니다. 함수를 내부에 넣을 수 없습니다.
- C++의 struct: 변수뿐만 아니라 '함수(메서드)'도 내부에 포함할 수 있습니다. 즉, C++에서는 구조체도 클래스처럼 작동할 수 있습니다.
💡 그그렇다면 C++에서 구조체와 클래스의 차이는 무엇일까요?
가장 결정적인 차이는 바로 **'기본 접근 제어자(Access Specifier)'**에 있습니다.
2. 핵심 차이점: 기본 접근 제어자 (Default Access Modifier)
C++에서 struct와 class의 유일하면서도 가장 큰 차이는 별도로 접근 제어자를 지정하지 않았을 때 적용되는 기본값입니다.
① 구조체(struct)의 기본 접근 제어자: public
구조체는 멤버 변수와 멤버 함수를 선언할 때 접근 제어자를 써주지 않으면 기본적으로 public으로 설정됩니다. 즉, 외부에서 자유롭게 접근이 가능합니다.
#include <iostream>
using namespace std;
struct PersonStruct {
string name; // 기본적으로 public!
int age; // 기본적으로 public!
};
int main() {
PersonStruct p;
p.name = "홍길동"; // 외부에서 직접 접근 및 변경 가능!
p.age = 20;
return 0;
}
② 클래스(class)의 기본 접근 제어자: private
반면 클래스는 별도로 지정을 하지 않으면 기본적으로 private으로 설정됩니다. 따라서 클래스 외부에서 멤버에 직접 접근하려고 하면 컴파일 에러가 발생합니다.
#include <iostream>
using namespace std;
class PersonClass {
string name; // 기본적으로 private!
int age; // 기본적으로 private!
};
int main() {
PersonClass p;
// p.name = "홍길동"; // Error! private 멤버이므로 외부 접근 불가
return 0;
}
클래스에서 외부 접근을 허용하려면 반드시 public: 키워드를 명시해 주어야 합니다.
3. 상속에서의 기본 접근 제어자 차이
시험에서 고득점을 가르는 변별력 문제는 '상속(Inheritance)' 조건에서 나옵니다.
부모 클래스/구조체를 상속받을 때 상속 접근 제어자를 생략할 경우, 구조체와 클래스의 동작이 다릅니다.
- struct의 기본 상속: public 상속 (부모의 public 멤버가 자식에게도 public으로 유지됨)
- class의 기본 상속: private 상속 (부모의 public 멤버가 자식에게 private으로 제한됨)
struct ParentStruct {};
struct ChildStruct : ParentStruct {}; // public 상속이 기본
class ParentClass {};
class ChildClass : ParentClass {}; // private 상속이 기본
4. 한눈에 비교하는 차이점 (시험 핵심 요약)
시험 직전 이것만 외우면 끝나는 요약표입니다!
| 구분 | 구조체 (struct) | 클래스 (class) |
| 기본 멤버 접근 제어 | public (외부 접근 허용) | private (외부 접근 차단) |
| 기본 상속 접근 제어 | public 상속 | private 상속 |
| 주요 목적 / 사용 용도 | 단순한 데이터들의 묶음 (C와의 호환성) | 객체지향 프로그래밍 (캡슐화, 정보 은닉) |
5. 시험 단골 출제 유형 체크
- Q. C++에서 struct와 class의 기능적 차이는 무엇인가?
- 👉 기능적으로는 동일하게 데이터와 함수를 가질 수 있으나, 기본 접근 제어자가 struct는 public, class는 private이라는 차이가 있습니다.
- Q. 클래스 선언 후 메인 함수에서 변수를 직접 수정하려고 할 때 에러가 나는 이유는?
- 👉 클래스의 기본 접근 제어자가 private이기 때문이며, 해결하기 위해서는 public: 키워드를 추가해야 합니다.
'프로그래밍 > C' 카테고리의 다른 글
| [C언어/C++] 메모리 동적 할당 malloc/free vs new/delete 차이점 완전 정리 (시험 단골 주제) (0) | 2026.08.13 |
|---|---|
| [C언어] call by value 와 call by reference 차이 완전 정리 (시험 단골 주제) (0) | 2026.08.13 |
| [C언어] 포인터를 이용한 swap 함수 구현 (1) | 2024.04.29 |
| [C언어] 조건문 if else 구문 (1) | 2024.01.27 |
| [C언어] 조건문 if (0) | 2024.01.27 |