반응형
📌 요약: 객체지향 프로그래밍 | 절차지향 vs 객체지향 | OOP 4대 특징 | 5대 설계 원칙 | 클래스 상호작용 예제
🧠 객체지향 프로그래밍 (OOP)
객체지향 프로그래밍은 프로그램을 서로 상호작용하는 객체로 구성하는 설계 방식입니다. 객체는 상태(데이터)와 동작(함수)을 함께 포함하며, 현실 세계를 모델링하는 데 유리합니다.
📌 절차지향과 객체지향 비교
- 절차지향: 프로그램의 순차적인 처리를 위주로 설계
- 객체지향: 독립적 객체를 통해 설계하며 상호작용 기반으로 구성
하드웨어의 발전과 함께 소프트웨어의 복잡성이 증가하였고, 절차지향 방식으로는 대규모 설계가 어려워졌습니다. 이에 따라 객체지향 방식이 대안으로 등장하게 되었습니다.
✅ 객체지향의 장단점
- 장점:
- 객체 단위로 디버깅과 유지보수가 유리함
- 상속을 통해 코드의 재사용성이 높음
- 클래스를 재활용함으로써 생산성이 향상됨
- 단점:
- 설계에 많은 시간이 소요되며 신중한 계획이 필요
- 절차지향에 비해 실행 속도가 느릴 수 있음
💡 객체지향의 4대 특징
- 캡슐화: 객체의 상태와 기능을 하나로 묶고 외부에는 필요한 것만 공개
- 상속: 부모 클래스의 기능을 자식 클래스가 물려받음
- 다형성: 같은 인터페이스로 다양한 방식의 동작 구현
- 추상화: 중요한 개념만을 표현하여 복잡성을 줄임
🧩 객체 설계의 5원칙 (SOLID)
- S - 단일 책임 원칙: 클래스는 하나의 책임만 가져야 함
- O - 개방/폐쇄 원칙: 확장에는 열려 있고, 수정에는 닫혀 있어야 함
- L - 리스코프 치환 원칙: 자식 클래스는 부모 클래스를 대체할 수 있어야 함
- I - 인터페이스 분리 원칙: 사용하지 않는 기능을 포함하지 않도록 분리
- D - 의존성 역전 원칙: 구체적인 구현보다 추상화된 구조에 의존해야 함
🚗 클래스 상호작용 예제
Vehicle 클래스는 이동 기능을, Driver 클래스는 Vehicle을 운전하는 기능을 가집니다. Driver는 Vehicle을 포인터로 참조하여 동작을 수행합니다.
#include <iostream>
using namespace std;
class Vehicle {
public:
string name;
int speed;
Vehicle(string name) {
this->name = name;
this->speed = 0;
}
void Move() {
speed += 10;
cout << name << "의 속도가" << speed << "으로 증가합니다." << endl;
}
};
class Driver {
public:
string name;
Driver(string name) {
this->name = name;
}
void Ride(Vehicle* vehicle) {
cout << this->name << "이/가 " << vehicle->name << "을 운전합니다" << endl;
}
};
int main() {
Driver* driver = new Driver("드라이버");
Vehicle* moterBike = new Vehicle("오토바이");
moterBike->Move();
moterBike->Move();
moterBike->Move();
driver->Ride(moterBike);
delete driver;
delete moterBike;
return 0;
}
실행 순서:
1. Driver 객체와 Vehicle 객체를 동적으로 생성
2. Vehicle의 Move() 함수가 3회 호출되어 속도가 증가
3. Driver의 Ride() 함수가 호출되어 출력 발생
4. 생성된 객체들을 delete로 메모리 해제
반응형
'C++ > 기본' 카테고리의 다른 글
| [C++] 19. OOP - 다형성 (0) | 2025.03.29 |
|---|---|
| [C++] 18. OOP - 상속 (0) | 2025.03.29 |
| [C++] 15. 클래스(3) (0) | 2025.03.29 |
| [C++] 14. 클래스(2) (0) | 2025.03.29 |
| [C++] 13. 클래스(1) (0) | 2025.03.29 |