개요
오버로딩과 오버라이딩의 구분없이 같은 의미를 가진 용어인줄 알았다. 은연중에 오버로딩과 오버라이딩이 다르다는 것을 깨닫고 어떤 차이점이 있는지 알아보게 되었다. 오늘은 오버로딩과 오버라이딩의 차이점을 알아보자 !
1. 오버로딩
더보기
더보기
동일한 이름의 함수를 여러 개 정의하지만, 매개변수의 타입이나 개수를 다르게 설정하여 다양한 방식으로 호출할 수 있게 만드는 기능이다.
오버로딩의 특징
1. 함수의 이름이 동일하다
2. 같은 클래스 내에서 사용된다
3. 매개변수의 타입, 개수, 순서가 다르다
4. 컴파일 시간에 결정된다 (동적 바인딩)
#include <iostream>
using namespace std;
class Calculator {
public:
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
};
int main() {
Calculator calc;
cout << calc.add(3, 4) << endl; // int add(int, int)
cout << calc.add(3.5, 4.5) << endl; // double add(double, double)
cout << calc.add(1, 2, 3) << endl; // int add(int, int, int)
return 0;
}
예를 들어, 계산기능을 구현할 때, (정수 + 정수), (실수 + 실수) 혹은 (정수 + 정수 + 정수)처럼 함수의 이름은 동일하게 두고 매개변수의 타입이나 개수만 다르게 선언하는 방법이다.
2. 오버라이딩
더보기
더보기
상속관계에서 기반 클래스의 함수를 파생 클래스에서 재정의하는 기능이다.
오버라이딩의 특징
1. 함수의 이름이 동일하다
2. 매개변수의 타입, 개수, 순서(시그니처)가 동일하다
3. 런타임 시간에 결정된다 (동적 바인딩)
4. 기반 클래스의 함수는 virtual로 선언되어야하며, 재정의한 함수에는 선택적으로 override를 명시할 수 있다
#include <iostream>
using namespace std;
class Base {
public:
virtual void show() {
cout << "Base 클래스의 show() 호출" << endl;
}
};
class Derived : public Base {
public:
void show() override {
cout << "Derived 클래스의 show() 호출" << endl;
}
};
int main() {
Base* basePtr; // 포인터를 통해 동적 바인딩
Derived derivedObj;
basePtr = &derivedObj;
basePtr->show(); // Derived 클래스의 show() 호출
return 0;
}
함수의 이름뿐만 아니라 오버로딩과 다르게 매개변수의 타입, 개수까지 동일한 것을 알 수 있다. 또한, 서로 다른 클래스내에서 사용할 수 있는 기능이다.
3. 차이점 요약
더보기
더보기
구분 | 오버로딩 | 오버라이딩 |
정의 | 같은 클래스내에서 함수 이름은 동일하고, 매개변수가 다르게 정의됨 | 파생 클래스에서 기반 클래스의 메서드를 재정의 |
반환타입 | 무관 | 동일 |
매개변수 | 달라야함 | 동일 |
바인딩 시점 |
컴파일 타임(정적 바인딩) | 런타임(동적 바인딩) |
느낀 점
오늘은 오버로딩과 오버라이딩의 차이점에 대해 알아봤다. 용어가 비슷해서 나를 포함해서 흔히들 헷갈려하는 개념인 것 같다. 객체지향의 근본이라고 불리는 개념이니 잘 알아두도록 하자
'C++ > 문법 정리' 카테고리의 다른 글
[C++] 객체지향 프로그래밍의 개념 (1) | 2025.01.02 |
---|---|
[C++] Template의 사용법 (0) | 2024.12.30 |
[C++] Dangling Pointer 대신 Smart Pointer 로 (1) | 2024.12.30 |
[C++] Class의 개념 (0) | 2024.12.27 |
[C++] 참조와 포인터의 차이 (1) | 2024.12.23 |