728x90
C++에서 가상 함수와 다형성은 객체 지향 프로그래밍의 핵심 원리 중 하나입니다.
이는 객체 지향 프로그래밍의 중요한 특징 중 하나로,
코드의 재사용성과 유지보수성을 향상시키는 데 기여합니다.
가상 함수 (Virtual Functions)
가상 함수는 파생 클래스에서 기본 클래스의 동일한 함수를 오버라이딩할 수 있도록 하는 메커니즘입니다.
이를 통해 상속 관계에서 다양한 객체들이 동일한 함수 호출 시 실제로 어떤 함수를 호출할지를 결정할 수 있습니다.
가상 함수를 정의하기 위해서는 기본 클래스의 멤버 함수 앞에 'virtual' 키워드를 사용합니다.
파생 클래스에서 이 함수를 재정의할 때에는 'override' 키워드를 사용하여 오버라이딩한다는 것을 명시합니다.
class Base {
public:
virtual void display() {
cout << "Base class display" << endl;
}
};
class Derived : public Base {
public:
void display() override {
cout << "Derived class display" << endl;
}
};
다형성 (Polymorphism)
다형성은 같은 이름을 가진 함수나 연산자가 다른 클래스에 의해 다르게 구현될 수 있는 능력을 말합니다.
C++에서 다형성은 런타임 다형성(Runtime Polymorphism)과 컴파일 타임 다형성(Compile-time Polymorphism)으로 나뉩니다.
- 런타임 다형성
가상 함수와 관련이 있으며, 객체의 실제 타입에 따라 실행 시에 다른 함수가 호출됩니다.
void someFunction(Base &obj) {
obj.display(); // 실행 시에 실제 객체의 타입에 따라 Base 또는 Derived 클래스의 display()가 호출됨
}
- 컴파일 타임 다형성
함수 오버로딩(Overloading)과 템플릿(Template)을 통해 구현되며, 컴파일 시에 어떤 함수가 호출될지가 결정됩니다.
void someFunction(int x) {
cout << "Integer value: " << x << endl;
}
void someFunction(double y) {
cout << "Double value: " << y << endl;
}
가상 함수와 다형성의 활용
다형성을 활용하면 유연하고 확장 가능한 코드를 작성할 수 있습니다.
예를 들어, 다양한 도형(원, 사각형, 삼각형 등)을 표현하는 클래스들이 있을 때,
각 도형이 자신의 면적을 계산하는 함수를 가지고 있다면
가상 함수를 통해 동일한 이름의 함수를 호출하여
각 도형에 맞게 다양한 동작을 수행할 수 있습니다.
class Shape {
public:
virtual double calculateArea() = 0; // 순수 가상 함수
};
class Rectangle : public Shape {
private:
double length;
double width;
public:
double calculateArea() override {
return length * width;
}
};
class Circle : public Shape {
private:
double radius;
public:
double calculateArea() override {
return 3.14 * radius * radius;
}
};
이처럼 다형성과 가상 함수는 객체 지향 프로그래밍에서 코드의 재사용성과 유지보수성을 높여주는 강력한 도구입니다.
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
728x90
반응형
'Application > 기초' 카테고리의 다른 글
[기초] C++ 인라인 함수 (Inline Function) (0) | 2024.04.22 |
---|---|
[기초] C++ 예외 처리 (0) | 2024.04.15 |
[기초] C++ 생성자와 소멸자 (new, delete) (0) | 2024.04.10 |
[기초] C++ 접근 지정자 (private , protected, public) (0) | 2024.04.08 |
[기초] C++ 상속과 다형성 (0) | 2024.04.04 |