본문 바로가기
C++/기본

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

by 위니밍 2025. 3. 29.
반응형
📌 요약: 객체지향 프로그래밍 | 절차지향 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