Application/기초

[기초] C++ 객체 지향 프로그래밍 (OOP)

devsalix 2024. 4. 2. 10:20
728x90

 

C++은 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)의 주요 언어 중 하나로,

개체(객체)들 간의 상호작용을 중심으로 프로그래밍하는 방식입니다.

C++에서 OOP의 기본 개념과 이점에 대해 살펴보겠습니다.

 


 

객체 지향 프로그래밍이란?
  • 객체 지향 프로그래밍은 현실 세계의 사물을 모델링하여 프로그램을 구성하는 개발 방법론입니다. 
    이는 코드의 구조를 이해하고 관리하기 쉽도록 돕습니다.
  • 객체 지향 프로그래밍은 객체라는 개념을 중심으로 프로그램을 설계하며,
    이 객체들 간의 상호작용을 통해 프로그램을 완성합니다.

 

기본 개념
  • 클래스(Class)
    클래스는 데이터와 함수를 하나로 묶은 사용자 정의 데이터 형식으로,
    객체를 생성하기 위한 설계도입니다.
  • 객체(Object)
    클래스의 인스턴스로, 실제로 메모리에 할당된 것을 의미합니다.
    객체는 클래스의 속성과 행위를 가집니다.
  • 상속(Inheritance)
    상속은 기존 클래스의 특성을 다른 클래스에게 물려주는 개념으로,
    코드의 재사용성을 높이고 유지보수를 쉽게 합니다.
  • 다형성(Polymorphism)
    다형성은 같은 이름의 메소드나 함수가 상황에 따라 다르게 동작하는 것을 의미하며,
    오버로딩과 오버라이딩을 통해 구현됩니다.
  • 캡슐화(Encapsulation)
    캡슐화는 데이터와 함수를 하나의 단위로 묶고,
    외부에서의 접근을 제어하는 것을 의미합니다.
    이는 데이터의 보안과 코드의 재사용성을 높입니다.

 

C++에서의 OOP
  • C++은 객체 지향 프로그래밍을 지원하는 언어로,
    클래스와 객체를 직접적으로 지원합니다.
  • 클래스는 키워드 'class'를 사용하여 정의되며,
    멤버 변수와 멤버 함수로 구성됩니다.
  • 객체는 클래스의 인스턴스로,
    'new' 키워드를 사용하여 동적으로 할당될 수 있습니다.
  • 상속은 키워드 'extends'를 사용하여 구현되며,
    다중 상속도 지원합니다.

 

장점
  • 코드의 재사용성을 높이고 유지보수를 용이하게 합니다.
  • 코드의 가독성을 향상시키고 모듈화를 촉진합니다.
  • 소프트웨어의 개발과 관리를 단순화시킵니다.
  • 개발자들 간의 협업을 원활하게 합니다.

 

예제

 

#include <iostream>
#include <string>

using namespace std;

// 도형 클래스 정의
class Shape {
public:
    virtual string getType() const {
        return "도형";
    }

    virtual double getArea() const {
        return 0;
    }
};

// 사각형 클래스 정의 (도형 클래스를 상속)
class Rectangle : public Shape {
private:
    double width;
    double height;

public:
    Rectangle(double w, double h) : width(w), height(h) {}

    string getType() const override {
        return "사각형";
    }

    double getArea() const override {
        return width * height;
    }
};

// 삼각형 클래스 정의 (도형 클래스를 상속)
class Triangle : public Shape {
private:
    double base;
    double height;

public:
    Triangle(double b, double h) : base(b), height(h) {}

    string getType() const override {
        return "삼각형";
    }

    double getArea() const override {
        return 0.5 * base * height;
    }
};

// 프로그램 실행
int main() {
    // 도형 객체 생성
    Shape* shape1 = new Rectangle(5, 4);
    Shape* shape2 = new Triangle(6, 8);

    // 도형 정보 출력
    cout << "도형 1: " << shape1->getType() << ", 넓이: " << shape1->getArea() << endl;
    cout << "도형 2: " << shape2->getType() << ", 넓이: " << shape2->getArea() << endl;

    delete shape1;
    delete shape2;

    return 0;
}

 

이 예제에서는 'Shape'라는 추상 클래스를 정의하고,

이를 상속받아 'Rectangle'과 'Triangle' 클래스를 구현합니다.

각 클래스에서는 'getType()'과 'getArea()'라는 가상 함수를 오버라이드하여

도형의 종류와 넓이를 반환합니다.

마지막으로 'main()' 함수에서는 'Shape' 포인터를 사용하여 도형 객체를 생성하고,

이를 활용하여 도형의 정보를 출력합니다.

 

마무리

 

C++의 객체 지향 프로그래밍은 효율적이고 유연한 소프트웨어 개발을 위한 강력한 도구입니다.

이를 통해 복잡한 문제를 간결하고 효율적으로 해결할 수 있습니다.

 

 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90
반응형