반도체/C++

19. C++의 객체지향 4가지

Clair_de_Lune 2024. 7. 31. 12:15
728x90

C++의 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 개발에서 객체를 중심으로 설계하는 프로그래밍 패러다임

. C++는 OOP의 4가지 주요 개념인 캡슐화, 상속, 다형성, 추상화를 지원

 

 

1. 캡슐화 (Encapsulation)

  • 설명: 객체의 상태(데이터)와 동작(메서드)을 하나의 단위로 묶어 외부로부터 보호하는 것입니다. 이를 통해 데이터에 대한 직접적인 접근을 제한하고, 객체의 내부 구현을 숨길 수 있습니다.
  • 예제:
    class Account {
    private:
        double balance; // private 멤버 변수
    
    public:
        // 생성자
        Account(double initialBalance) : balance(initialBalance) {}
    
        // 메서드: 잔액 조회
        double getBalance() const {
            return balance;
        }
    
        // 메서드: 입금
        void deposit(double amount) {
            if (amount > 0) {
                balance += amount;
            }
        }
    };
    

2. 상속 (Inheritance)

  • 설명: 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받는 것입니다. 이를 통해 코드의 재사용성을 높이고, 계층적인 관계를 표현할 수 있습니다.
  • 예제:
    class Animal {
    public:
        void eat() {
            std::cout << "Eating..." << std::endl;
        }
    };
    
    class Dog : public Animal { // Animal 클래스를 상속
    public:
        void bark() {
            std::cout << "Barking..." << std::endl;
        }
    };
    
    Dog myDog;
    myDog.eat(); // 상속받은 메서드 호출
    myDog.bark(); // Dog 클래스의 메서드 호출
    

3. 다형성 (Polymorphism)

  • 설명: 같은 인터페이스를 통해 서로 다른 객체가 각기 다른 방식으로 동작할 수 있는 능력입니다. C++에서는 주로 함수 오버로딩과 가상 함수를 사용하여 다형성을 구현합니다.
  • 예제:
    class Shape {
    public:
        virtual void draw() { // 가상 함수
            std::cout << "Drawing a shape." << std::endl;
        }
    };
    
    class Circle : public Shape {
    public:
        void draw() override { // 오버라이드
            std::cout << "Drawing a circle." << std::endl;
        }
    };
    
    class Square : public Shape {
    public:
        void draw() override {
            std::cout << "Drawing a square." << std::endl;
        }
    };
    
    void render(Shape* shape) {
        shape->draw(); // 다형성 사용
    }
    
    Circle circle;
    Square square;
    render(&circle); // "Drawing a circle."
    render(&square); // "Drawing a square."
    

4. 추상화 (Abstraction)

  • 설명: 복잡한 시스템을 단순화하여 필요한 부분만을 노출하는 것입니다. C++에서는 추상 클래스를 사용하여 인터페이스를 정의하고, 이 인터페이스를 구현하는 구체적인 클래스를 만들 수 있습니다.
  • 예제:
    class AbstractShape {
    public:
        virtual void draw() = 0; // 순수 가상 함수
    };
    
    class Triangle : public AbstractShape {
    public:
        void draw() override {
            std::cout << "Drawing a triangle." << std::endl;
        }
    };
    
    Triangle triangle;
    triangle.draw(); // "Drawing a triangle."
  • 캡슐화: 데이터를 보호하고, 내부 구현을 숨김.
  • 상속: 코드 재사용 및 계층적 관계 표현.
  • 다형성: 동일한 인터페이스로 다양한 객체의 동작 구현.
  • 추상화: 복잡성을 줄이고 필요한 기능만을 노출.
728x90

'반도체 > C++' 카테고리의 다른 글

C#과 C++의 객체 지향 개념 차이  (1) 2024.08.01
20.C++ 템플릿과 함수 오버로딩의 차이  (2) 2024.07.31
18. C++의 형변환 (2) 안정성  (79) 2024.07.29
18. C++의 형변환 (1)  (1) 2024.07.29
17. C++의 템플릿  (1) 2024.07.29