객체(개체) 지향 프로그래밍은 소프트웨어 설계 패러다임 중 하나로,
Object의 모음으로 Object 간의 상호작용을 통해 작업을 수행하는 방식이다.
캡슐화, 상속, 다형성, 추상화 등 네가지 개념이 있다.
1. 캡슐화 (Encapsulation)
개체의 데이터와 이를 처리하는 메서드를 하나로 묶어 개체의 내부 상태를 외부로부터 숨기고
개체의 인터페이스를 통해서만 접근 가능하도록 제한한다.
데이터 보호가 가능하고 코드의 모튤화나 유지보수가 용이하다
class Car {
private:
int speed; // 캡슐화된 데이터
public:
void setSpeed(int s) { // 공개 메서드를 통해 데이터 접근
if (s > 0) speed = s;
}
int getSpeed() {
return speed;
}
};
2. 상속 (Inheritance)
새로운 클래스(파생 클래스)가 기존 클래스(기본 클래스)의 속성과 메서드를 물려받는 것이다.
코드의 재사용성을 높이고, 계층적 관계 표현이나 다형성 구현이 가능하다
class Animal {
public:
void eat() {
std::cout << "Eating..." << std::endl;
}
};
class Dog : public Animal {
public:
void bark() {
std::cout << "Barking..." << std::endl;
}
};
3. 다형성 (Polymorphism)
동일한 인터페이스를 통해 서로 다른 데이터 타입의 개체를 다룰 수 있다.
함수 오버로딩, 오버라이딩, 가상 함수를 통해 구현된다.
유연하고 확장 가능한 코드 작성이 가능하다.
class Shape {
public:
virtual void draw() {
std::cout << "Drawing shape" << std::endl;
}
};
class Circle : public Shape {
public:
void draw() override {
std::cout << "Drawing circle" << std::endl;
}
};
class Square : public Shape {
public:
void draw() override {
std::cout << "Drawing square" << std::endl;
}
};
void render(Shape& shape) {
shape.draw(); // 다형성으로 인해 실제 객체의 draw 메서드 호출
}
4. 추상화 (Abstraction)
복잡한 시스템을 단순화하고 중요한 부분만 모델링하는 것이다.
추상 클래스와 인터페이스를 통해 구현된다.
복잡성이 감소하고 중요한 정보에 집중 할 수 있다
class AbstractDevice {
public:
virtual void turnOn() = 0; // 순수 가상 함수
virtual void turnOff() = 0;
};
class Fan : public AbstractDevice {
public:
void turnOn() override {
std::cout << "Fan is on" << std::endl;
}
void turnOff() override {
std::cout << "Fan is off" << std::endl;
}
};
'C++' 카테고리의 다른 글
#include <memory> Smart Pointer (0) | 2024.07.01 |
---|---|
Struct vs Class (0) | 2024.06.20 |
SOLID - OOP 설계의 원칙 (0) | 2024.06.08 |
std::sort() & Lamda (0) | 2024.05.14 |
C++ 부수기 - 1- Vector (0) | 2024.03.20 |