[c++] 구조체와 클래스의 추상 클래스

구조체와 클래스는 C++에서 데이터를 구조화하는 데 사용되는 두 가지 주요 개념입니다. 각각의 기능과 용도에 대해 살펴보겠습니다.

1. 구조체(Struct)

구조체는 C++에서 데이터를 그룹화하여 하나의 새로운 데이터 형식을 만드는 데 사용됩니다. 주로 연관된 데이터 필드를 하나로 묶어서 사용합니다. 각각의 데이터 필드는 구조체 내에서 서로 다른 자료형을 가질 수 있습니다.

struct Person {
    string name;
    int age;
    float height;
};

위의 코드에서는 Person이라는 구조체를 정의하고 있으며, name, age, height와 같은 필드를 가지고 있습니다.

2. 클래스(Class)

클래스는 구조체와 마찬가지로 관련 있는 데이터와 함수를 묶어서 하나의 새로운 데이터 형식을 만드는 데 사용됩니다. 하지만 클래스는 데이터 뿐만 아니라 동작까지도 포함합니다.

class Animal {
    string type;
    int age;

public:
    void makeSound() {
        cout << "Animal sound" << endl;
    }
};

위의 코드에서는 Animal이라는 클래스를 정의하고 있습니다. type, age 필드와 makeSound라는 함수를 가지고 있으며, makeSound 함수는 동작을 정의합니다.

추상 클래스(Abstract Class)

추상 클래스는 순수 가상 함수(pure virtual function)를 가지는 클래스입니다. 순수 가상 함수는 함수 몸체가 없이 정의되어 있어서, 해당 클래스를 상속받는 파생 클래스에서 이를 구현해야 합니다. 이를 통해 클래스의 인터페이스와 구현을 분리할 수 있습니다.

다음은 추상 클래스의 예시입니다.

class Shape {
public:
    virtual double calculateArea() = 0;
    virtual double calculatePerimeter() = 0;
};

class Circle : public Shape {
private:
    double radius;

public:
    Circle(double r) : radius(r) {}

    double calculateArea() override {
        return 3.14 * radius * radius;
    }

    double calculatePerimeter() override {
        return 2 * 3.14 * radius;
    }
};

위의 코드에서 Shape 클래스는 순수 가상 함수를 가지고 있으며, 이러한 형태로 다양한 도형을 표현하는 파생 클래스를 만들 수 있습니다.

구조체와 클래스는 각각의 특성에 따라 다양한 용도로 사용되고, 추상 클래스는 클래스의 인터페이스를 정의하고자 할 때 유용하게 활용됩니다.

참고 자료