클래스(Class)와 구조체(Struct)
C++에서 Class와 Struct는 둘 다 사용자 정의 타입을 만들기 위한 도구입니다. 많은 초보자들이 C++에서 Class와 Struct를 혼용할 수 있다는 사실에 놀라지만, 실제로 이 둘은 문법적으로 거의 동일합니다. 하지만 몇 가지 중요한 차이가 존재하며, 이 차이점은 코드의 가독성, 유지보수성, 그리고 협업에 있어 중요한 영향을 줄 수 있습니다. 특히 C++에서는 구조체도 멤버 함수, 상속, 접근 제어자 등을 사용할 수 있기 때문에 단순히 "데이터 집합"으로만 구조체를 생각하는 것은 C 언어의 관점에 국한된 것입니다.
1. 클래스와 구조체의 공통점
C++에서 Class와 Struct는 매우 비슷하게 동작합니다. 다음과 같은 기능들을 공통적으로 사용할 수 있습니다.
- 멤버 변수와 멤버 함수 정의
- 생성자와 소멸자
- 접근 제어자 (public, private, protected)
- 상속과 다형성 (virtual 함수 포함)
- 연산자 오버로딩
즉, C++에서는 구조체도 객체 지향적인 기능을 모두 사용할 수 있습니다. 예를 들어, 다음과 같은 구조체는 완전한 클래스처럼 작동합니다.
struct Point {
int x, y;
Point(int x, int y) : x(x), y(y) {}
void move(int dx, int dy) {
x += dx;
y += dy;
}
};
2. 클래스와 구조체의 차이점
그렇다면 class와 struct의 차이는 무엇일까요? 기본 접근 제어자(default access specifier)가 다르다는 점이 가장 큰 차이입니다.
요소 | Struct | Class |
기본 멤버 접근 제어자 | public | private |
기본 상속 접근 제어자 | public | private |
a. 접근 제어자 (Default Access Specifier)
struct MyStruct {
int x; // public by default
};
class MyClass {
int x; // private by default
};
- MyStruct 의 x는 외부에서 접근 가능하지만, MyClass 의 x는 접근 불가능합니다.
b. 상속 접근 제어자 (Default Inheritance Specifier)
struct Base { };
struct Derived : Base { }; // public 상속
class Base2 { };
class Derived2 : Base2 { }; // private 상속
- 상속 시에도 Struct 는 기본적으로 public 상속, Class는 private 상속이 적용됩니다.
3. 어떤 상황에서 struct를 쓰고, 어떤 상황에서 class를 써야 할까?
일반적인 컨벤션
- Struct : 주로 데이터 구조(data-only structure) 를 표현할 때 사용합니다. (예: 좌표, 설정 값, 메시지 패킷 등)
- Class : 객체 지향 프로그래밍(OOP)을 목적으로, 기능을 포함한 복잡한 타입을 만들 때 사용합니다.
예시
// struct 예시: 단순 데이터 구조
struct Config {
int width;
int height;
bool fullscreen;
};
// class 예시: 내부 상태와 로직을 갖는 객체
class Window {
private:
int width;
int height;
bool isOpen;
public:
Window(int w, int h) : width(w), height(h), isOpen(false) {}
void open() { isOpen = true; }
void close() { isOpen = false; }
};
4. 마무리
C++에서 Class와 Struct는 많은 공통점을 가지고 있지만, 기본 접근 제어자와 상속 방식이 다르다는 점에서 차이를 보입니다. 따라서 목적에 맞게 두 키워드를 구분하여 사용하면 코드의 의도를 더 명확하게 전달할 수 있습니다. 간단한 데이터 구조는 Struct, 로직과 캡슐화를 포함하는 객체는 Class를 사용하는 것이 일반적인 컨벤션입니다.
함께 보면 좋은 자료
블로그 글 :
[Class] 객체지향 프로그래밍의 핵심
클래스(Class) C++는 절차적 프로그래밍과 객체지향 프로그래밍(OOP)을 모두 지원하는 다중 패러다임 언어입니다. 그중 클래스(class)는 객체지향 프로그래밍의 핵심 개념으로, 데이터와 관련된 동작
dachaes-devlogs.tistory.com
'언어 > C++' 카테고리의 다른 글
[Class의 상속] 재사용성과 확장성을 높이는 객체지향의 핵심 (0) | 2025.05.05 |
---|---|
[Class] 객체지향 프로그래밍의 핵심 (0) | 2025.05.01 |