[c++] 함수 오버로딩과 함수 객체

C++는 함수 오버로딩과 함수 객체를 통해 다형성을 지원합니다. 이 두 가지 개념은 코드의 유연성과 재사용성을 높여주는 중요한 기능들입니다.

함수 오버로딩

함수 오버로딩은 하나 이상의 함수가 동일한 이름을 가질 수 있도록 하는 기능입니다. 이때 함수의 시그니처(매개변수의 개수나 타입)가 서로 달라야 합니다. 함수가 호출될 때 전달되는 인자의 타입이나 개수에 따라 호출될 함수가 결정됩니다.

#include <iostream>

void print(int num) {
    std::cout << "정수: " << num << std::endl;
}

void print(double num) {
    std::cout << "실수: " << num << std::endl;
}

int main() {
    print(5);       // print(int) 호출
    print(3.14);    // print(double) 호출
    return 0;
}

위의 예시에서 print 함수는 두 번 정의되어 있지만, 매개변수의 타입에 따라 다른 함수가 호출됨을 확인할 수 있습니다.

함수 객체

함수 객체는 함수 호출 연산자(operator())를 오버로딩하여 함수처럼 동작하도록 만든 객체입니다. 함수 객체는 클래스나 구조체로 구현되며, 상태를 유지할 수 있어 더 복잡한 동작을 구현할 수 있습니다.

#include <iostream>

class Adder {
public:
    Adder(int num) : num(num) {}

    int operator()(int val) {
        return num + val;
    }

private:
    int num;
};

int main() {
    Adder addFive(5);
    std::cout << addFive(10) << std::endl;  // 출력: 15
    return 0;
}

위의 예시에서 Adder 클래스는 operator() 함수를 오버로딩하여 함수처럼 사용됩니다.

함수 오버로딩과 함수 객체는 C++에서 강력한 다형성을 제공하며, 이를 통해 코드의 재사용성과 가독성을 높일 수 있습니다.

참고 자료