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

C++에서 클래스와 구조체, 언제 어떤 것을 사용해야 할까?

C++에서 구조체(struct)클래스(class)는 문법적으로 거의 동일하지만, 몇 가지 중요한 차이점이 있습니다. 이 차이점을 정확히 이해하면 상황에 맞게 클래스와 구조체 중 어느 것을 선택해야 할지 판단하는 데 큰 도움이 됩니다.

클래스와 구조체의 주요 차이점

가장 핵심적인 차이는 기본 접근 지정자(default access specifier)입니다.

  • 클래스: 모든 멤버가 기본적으로 private로 선언됩니다.
  • 구조체: 모든 멤버가 기본적으로 public으로 선언됩니다.

즉, 접근 지정자를 명시하지 않으면 클래스의 멤버는 외부에서 직접 접근할 수 없지만, 구조체의 멤버는 자유롭게 접근할 수 있습니다.

클래스 예제 - 컴파일 오류 발생

#include <iostream>
using namespace std;

class Example {
    int val;  // 기본적으로 private
};

int main() {
    Example obj;
    obj.val = 20;  // 오류! private 멤버에 직접 접근 불가
    return 0;
}

위 프로그램은 컴파일 오류가 발생합니다. val이 기본적으로 private이기 때문에 객체 obj를 통해 직접 접근할 수 없기 때문입니다.

구조체 예제 - 정상 동작

#include <iostream>
using namespace std;

struct Example {
    int val;  // 기본적으로 public
};

int main() {
    Example obj;
    obj.val = 20;
    cout << "Value is: " << obj.val;
    return 0;
}

출력 결과

Value is: 20

위 프로그램은 정상적으로 실행됩니다. 구조체의 멤버 val은 기본적으로 public이므로 객체를 통해 직접 접근할 수 있기 때문입니다.

상속 시의 차이점

클래스와 구조체의 또 다른 차이점은 상속(inheritance) 과정에서 드러납니다.

  • 클래스 상속: 상속 시 기반 클래스(base class)의 접근 지정자는 기본적으로 private입니다.
  • 구조체 상속: 상속 시 기반 구조체(base struct)의 접근 지정자는 기본적으로 public입니다.

예를 들어 struct Derived : Base처럼 작성하면 Base의 public 멤버가 그대로 public으로 유지되지만, class Derived : Base로 작성하면 Base의 public 멤버가 파생 클래스에서 private이 됩니다.

그렇다면 언제 무엇을 사용해야 할까?

C++에서는 두 키워드의 기능적 차이가 위 사항뿐이므로, 결국 코딩 스타일과 관례(convention)에 따라 선택하는 것이 일반적입니다.

  • 구조체를 사용하는 경우: 단순히 데이터를 묶어서 담는 용도(Plain Old Data)일 때, 즉 캡슐화나 복잡한 로직 없이 데이터만 전달하는 경우에 적합합니다.
  • 클래스를 사용하는 경우: 데이터와 이를 조작하는 메서드를 함께 캡슐화하고, 접근 제어·상속·다형성 등 객체지향 설계가 필요한 경우에 적합합니다.

요약하면, C++에서 클래스와 구조체의 실질적 차이는 기본 접근 지정자(private vs public)상속 시 기본 접근 방식뿐입니다. 데이터 중심의 간단한 구조에는 구조체를, 완전한 객체지향 설계에는 클래스를 사용하는 것이 C++ 커뮤니티의 일반적인 관례이며, 코드의 의도를 명확하게 전달하는 데 도움이 됩니다.