[c++] 함수 오버로딩과 태스크 인터페이스

이번에는 C++의 함수 오버로딩에 대해 알아보고, 클래스의 인터페이스를 설계하는 방법과 함께 어떻게 사용되는지 살펴보겠습니다.

함수 오버로딩(Overloading)

함수 오버로딩은 C++에서 동일한 이름을 가진 여러 함수를 정의하는 것을 말합니다. 대부분은 매개변수의 개수나 타입이 다를 때 사용됩니다. 예를 들어, 다음은 두 개의 calculateArea 함수입니다.

#include <iostream>

class Shape {
public:
    void calculateArea(int side) {
        std::cout << "Area of square: " << (side * side) << std::endl;
    }

    void calculateArea(int length, int breadth) {
        std::cout << "Area of rectangle: " << (length * breadth) << std::endl;
    }
};

int main() {
    Shape shape;
    shape.calculateArea(4);
    shape.calculateArea(3, 5);
    return 0;
}

위의 예제에서 Shape 클래스 내에는 calculateArea 함수가 두 번 오버로딩되어 정의되어 있습니다.

태스크 인터페이스(Interface)

C++에서 태스크 인터페이스를 설계한다는 것은 클래스의 인터페이스를 설계하는 것을 의미합니다.

인터페이스(Interface)는 클래스의 공개적인 부분으로, 클래스를 사용하는 다른 코드에게 제공하는 기능과 동작을 의미합니다.

예를 들어, 웹 크롤러 프로그램을 만들 때, WebCrawler 클래스에 startstop이라는 두 가지 함수를 인터페이스로 설계할 수 있습니다.

class IWebCrawler {
public:
    virtual void start() = 0;
    virtual void stop() = 0;
    virtual ~IWebCrawler() {}
};

위의 코드에서 IWebCrawler 클래스는 순수 가상 함수만을 포함하고 있으므로, 이를 순수 가상 클래스(abstract class) 또는 태스크 인터페이스라고 할 수 있습니다.

이 경우, 다른 클래스에서 IWebCrawler 인터페이스를 상속받아 실제 기능을 구현하게 됩니다.

이러한 방식은 개발할 모듈이 여러 요소로 구성되어 있을 때, 각 요소의 역할을 명확히 하고, 모듈 간의 결합도를 낮추는 데 유용합니다.

결론

함수 오버로딩은 매우 유용한 기능으로, 동일한 이름의 함수를 다양한 매개변수로 호출할 수 있도록 합니다. 또한, 태스크 인터페이스를 설계함으로써 모듈 간의 결합도를 낮추고 역할을 분리하는 데 도움을 줄 수 있습니다. C++에서 이러한 개념을 활용하여 보다 효율적이고 유지보수가 쉬운 코드를 작성할 수 있습니다.

참고 문헌: