본문 바로가기
프로그래밍/C

[C언어/C++] 구조체(struct)와 클래스(class)의 차이점 완전 정리 (시험 단골 주제)

by 아임코딩 2026. 8. 13.
반응형

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으로 설정됩니다. 즉, 외부에서 자유롭게 접근이 가능합니다.

C++
 
#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으로 설정됩니다. 따라서 클래스 외부에서 멤버에 직접 접근하려고 하면 컴파일 에러가 발생합니다.

C++
 
#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으로 제한됨)
C++
 
struct ParentStruct {};
struct ChildStruct : ParentStruct {}; // public 상속이 기본

class ParentClass {};
class ChildClass : ParentClass {};   // private 상속이 기본

4. 한눈에 비교하는 차이점 (시험 핵심 요약)

시험 직전 이것만 외우면 끝나는 요약표입니다!

구분 구조체 (struct) 클래스 (class)
기본 멤버 접근 제어 public (외부 접근 허용) private (외부 접근 차단)
기본 상속 접근 제어 public 상속 private 상속
주요 목적 / 사용 용도 단순한 데이터들의 묶음 (C와의 호환성) 객체지향 프로그래밍 (캡슐화, 정보 은닉)

5. 시험 단골 출제 유형 체크

  1. Q. C++에서 struct와 class의 기능적 차이는 무엇인가?
  2. 👉 기능적으로는 동일하게 데이터와 함수를 가질 수 있으나, 기본 접근 제어자가 struct는 public, class는 private이라는 차이가 있습니다.
  3. Q. 클래스 선언 후 메인 함수에서 변수를 직접 수정하려고 할 때 에러가 나는 이유는?
  4. 👉 클래스의 기본 접근 제어자가 private이기 때문이며, 해결하기 위해서는 public: 키워드를 추가해야 합니다.
반응형