C++ 구조체와 클래스의 기본 차이점
C++에서 구조체(struct)와 클래스(class)는 문법적으로 거의 동일한 기능을 제공하지만, 한 가지 중요한 차이점이 있습니다. 바로 기본 접근 지정자(default access specifier)입니다.
- 구조체(struct): 멤버 변수와 멤버 함수, 그리고 상속 시 기반 클래스가 기본적으로
public으로 설정됩니다. - 클래스(class): 멤버 변수와 멤버 함수, 그리고 기반 클래스가 기본적으로
private으로 설정됩니다.
이 차이점 외에는 구조체와 클래스가 기능적으로 완전히 동일합니다. 즉, 구조체에도 생성자, 소멸자, 멤버 함수를 정의할 수 있으며, 클래스처럼 상속과 다형성도 자유롭게 활용할 수 있습니다.
코드 예제로 확인하기
struct MyStruct {
int value; // 기본적으로 public
};
class MyClass {
int value; // 기본적으로 private
};위 예제에서 MyStruct의 value는 외부에서 자유롭게 접근할 수 있지만, MyClass의 value는 public: 키워드를 명시하지 않는 한 외부에서 접근할 수 없습니다.
사용 목적에 따른 관례적 차이
기능은 같지만, 실무에서는 두 키워드가 서로 다른 맥락에서 사용되는 경향이 있습니다. 이는 언어적 제약이 아니라 시맨틱(의미론)에 기반한 관례입니다.
- 구조체: 주로 데이터를 담는 자료구조(data structure)로 사용됩니다. 좌표나 설정값처럼 여러 값을 하나로 묶어 표현하는 용도에 적합합니다.
- 클래스: 데이터와 이를 조작하는 기능(동작)을 함께 캡슐화하는 데 사용됩니다. 객체 지향 설계에서 현실 세계의 사물이나 개념을 모델링하는 데 적합합니다.
정리
단순히 데이터를 묶어 전달하는 용도라면 구조체를, 캡슐화·상속·다형성 등 객체 지향적인 설계가 필요하다면 클래스를 사용하는 것이 C++ 커뮤니티의 일반적인 관례입니다. 두 키워드의 기술적 차이는 오직 기본 접근 지정자뿐이라는 점을 기억해 두면 좋습니다.