[c++] 함수 오버로딩과 함수 재정의의 차이

함수 오버로딩 (Function Overloading)

함수 오버로딩은 정적 다형성(static polymorphism)을 구현하는 방법으로, 동일한 이름을 가진 여러 개의 함수를 정의합니다. 컴파일러는 함수 호출 시 전달된 매개변수의 개수나 타입에 따라 올바른 함수를 선택합니다.

class Calculator {
public:
    int add(int a, int b) {
        return a + b;
    }

    float add(float a, float b) {
        return a + b;
    }
};

위의 예시에서 add 함수는 두 개의 오버로딩된 버전을 가지고 있습니다. 첫 번째 버전은 int 타입의 매개변수를 받고, 두 번째 버전은 float 타입의 매개변수를 받습니다.

함수 재정의 (Function Overriding)

함수 재정의는 동적 다형성(dynamic polymorphism)을 구현하는 방법으로, 자식 클래스가 부모 클래스의 함수를 다시 정의합니다. 이를 통해 런타임에 올바른 함수가 선택됩니다.

class Animal {
public:
    virtual void makeSound() {
        cout << "Some generic sound" << endl;
    }
};

class Dog : public Animal {
public:
    void makeSound() override {
        cout << "Woof!" << endl;
    }
};

위의 예시에서 makeSound 함수는 부모 클래스 Animal과 그 자식 클래스 Dog에서 재정의되었습니다. 이때 override 키워드는 C++11부터 도입된, 함수가 재정의되었음을 명시하는 키워드입니다.

함수 오버로딩과 함수 재정의는 다형성을 구현하는 다양한 방법 중에서도 중요한 두 가지 방법입니다. 각각의 사용 목적에 따라 적절히 활용할 수 있습니다.