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 |