Program Language/C++ 언어

13. C++ OOP 개념 이해하기 : 캡슐화, 상속성, 다형성

parkes811 2024. 6. 17. 01:42

 

  • C++의 OOP 개념 이해하기 : 캡슐화, 상속성, 다형성

- C++은 강력한 객체 지향 프로그래밍(OOP) 언어로, 모듈화 및 재사용 가능한 코드를 작성하는 데 큰 도움을 줍니다. 

 

  • OOP 캡슐화

- 캡슐화 

 : 데이터와 메서드를 하나의 단위로 묶는 방법입니다.

   클래스 내부의 데이터 멤버를 private으로 선언하고, public 메서드를 통해 접근하도록 설계하여 데이터의 무결성을 유

   지 합니다.

   이렇게 하면 외부에서 객체의 내부 구조를 직접 변경할 수 없으므로 안정성이 높아집니다.

 

- 프렌드 함수

 : 클래스의 비공개 멤버에 접근할 수 있는 특수한 함수로, 클래스 내부 구현에 직접 접근할 필요가 있을 때 유용합니다.

 

- 정적 멤버

 : 클래스의 모든 객체가 공유하는 멤버입니다. 클래스 내에 선언되며 객체가 아닌 클래스 자체에 속합니다.

 

- 상수 멤버

 : 변경할 수 없는 멤버로, 객체의 상태를 불변으로 유지해야 할 때 사용합니다.

 

- 예제:

class Rectangle {
private:
    double width;
    double height;
public:
    static int objectCount;
    const double PI = 3.14159;
    
    void setWidth(double w) {
        width = w;
    }
    void setHeight(double h) {
        height = h;
    }
    double getArea() {
        return width * height;
    }
    friend void printWidth(Rectangle r);
};

void printWidth(Rectangle r) {
    cout << "Width of rectangle: " << r.width << endl;
}

int Rectangle::objectCount = 0;

  • OOP 상속성

- 상속성

 : 새로운 클래스가 기존 클래스의 속성과 메서드를 상속받아 사용하는 기능입니다.

   이를 통해 코드 재사용성이 높아지고 클래스 간의 계층적 관계를 형성할 수 있습니다.

 

- 파생 클래스

 : 기본 클래스에서 상속받은 클래스입니다.

 

- 멤버 함수 오버라이딩

 : 파생 클래스에서 기본 클래스의 메서드를 재정의하는 것을 의미합니다.

 

- 다중 상속

 : 하나의 클래스가 둘 이상의 클래스로부터 상속받는 것을 말합니다.

 

- 예제:

class Animal {
public:
    virtual void eat() {
        cout << "Eating..." << endl;
    }
};

class Dog : public Animal {
public:
    void eat() override {
        cout << "Dog eating..." << endl;
    }
    void bark() {
        cout << "Barking..." << endl;
    }
};

class Robot {
public:
    void recharge() {
        cout << "Recharging..." << endl;
    }
};

class RoboDog : public Dog, public Robot {
public:
    void run() {
        cout << "Running..." << endl;
    }
};
 

  • OOP 다형성

- 다형성

 : 하나의 인터페이스로 여러 데이터 타입이나 메서드를 처리할 수 있게 하는 기능입니다.

   주로 함수 오버로딩과 상속을 통해 구현됩니다.

   다형성은 컴파일 시간 다형성과 런타임 다형성으로 나눌 수 있습니다.

 

- 가상 함수

 : 런타임 다형성을 구현하는 데 사용됩니다.

 

- 추상 클래스

 : 하나 이상의 순수 가상 함수를 포함하는 클래스입니다.

   이 클래스는 직접 객체를 생성할 수 없으며, 이를 상속받는 파생 클래스에서 구현해야 합니다.

 

- 예제 :

class Shape {
public:
    virtual void draw() = 0;  // 순수 가상 함수
};

class Circle : public Shape {
public:
    void draw() override {
        cout << "Drawing Circle" << endl;
    }
};

class Square : public Shape {
public:
    void draw() override {
        cout << "Drawing Square" << endl;
    }
};

void render(Shape* shape) {
    shape->draw();
}