ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++ 구조체 vs 클래스: 차이점과 올바른 활용법
    c++ 2025. 2. 24. 19:03
    728x90

    C++에서 구조체(struct)와 클래스(class)의 차이는 많은 프로그래머들이 한 번쯤 궁금해하는 주제입니다. 구조체와 클래스 모두 데이터를 담을 수 있는 사용자 정의 데이터 타입이지만, 몇 가지 중요한 차이점이 존재합니다.

    1. 기본 접근 제어자의 차이

    구조체와 클래스의 가장 큰 차이점은 멤버 변수 및 함수의 기본 접근 제어자가 다르다는 점입니다.

    • 구조체(struct): 기본적으로 public 접근 지정자를 가집니다.
    • 클래스(class): 기본적으로 private 접근 지정자를 가집니다.

    예제 코드로 확인해보겠습니다.

    #include <iostream>
    using namespace std;
    
    struct MyStruct {
        int a;  // 기본적으로 public
    };
    
    class MyClass {
        int a;  // 기본적으로 private
    };
    
    int main() {
        MyStruct s;
        s.a = 10;  // 가능
    
        MyClass c;
        // c.a = 10;  // 컴파일 에러 (private 멤버 접근 불가)
    
        return 0;
    }

    2. 객체 지향적 설계

    구조체는 일반적으로 단순한 데이터 그룹을 나타내는 용도로 사용되며, 클래스는 객체 지향 프로그래밍(OOP)에서 캡슐화, 상속, 다형성을 활용하는 데 적합합니다.

    struct Point {
        int x, y;
    };
    
    class Shape {
    private:
        int width, height;
    public:
        void setSize(int w, int h) {
            width = w;
            height = h;
        }
    };

    위 예제에서 구조체 Point는 단순한 좌표 데이터를 저장하는 용도로 사용됩니다. 반면 Shape 클래스는 내부 데이터를 숨기고 setSize() 함수를 통해 데이터를 변경하도록 설계되었습니다.

    3. 상속 가능 여부

    구조체와 클래스는 모두 상속을 지원하지만, 구조체는 기본적으로 public 상속이 적용되고, 클래스는 기본적으로 private 상속이 적용됩니다.

    struct BaseStruct {
        int value;
    };
    
    struct DerivedStruct : BaseStruct { // 기본적으로 public 상속
    };
    
    class BaseClass {
        int value;
    };
    
    class DerivedClass : BaseClass { // 기본적으로 private 상속
    };

    위 코드에서 DerivedStructBaseStruct의 멤버에 직접 접근할 수 있지만, DerivedClassBaseClass의 멤버에 직접 접근할 수 없습니다.

    4. 사용 사례

    • 구조체(struct): 주로 데이터를 담는 용도로 사용 (예: 좌표, 색상, 설정 값 등)
    • 클래스(class): 객체 지향 프로그래밍을 위한 캡슐화, 상속, 다형성을 활용할 때 사용

    결론

    구조체와 클래스는 기능적으로 유사하지만, 접근 제어자의 기본값과 객체 지향적 설계에서의 활용 방식이 다릅니다. 단순한 데이터 저장 용도로는 구조체를 사용하고, 복잡한 로직이 포함된 경우에는 클래스를 사용하는 것이 일반적인 관례입니다.

    C++을 사용할 때 구조체와 클래스를 적절히 구분하여 사용하면 코드의 가독성과 유지보수성이 향상됩니다.

    728x90

    'c++' 카테고리의 다른 글

    고급 문법과 최적화  (0) 2025.03.02
    코드 품질과 유지보수성  (0) 2025.03.02
    Modern C++  (0) 2025.02.06
    C++ 네트워크 프로그래밍과 소켓 통신  (0) 2025.02.04
    C++ 멀티스레딩 프로그래밍과 동기화 기법  (0) 2025.02.03
Designed by Tistory.