언어/C++

[Class와 Struct] 클래스와 구조체의 차이

Dachaes 2025. 5. 6. 19:07
728x90

클래스(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

 


 

728x90