[c++] 함수 오버로딩과 가변인자 함수

C++는 다양한 기능을 제공하여 프로그래머가 효율적으로 코드를 작성할 수 있도록 도와줍니다. 여기서는 C++에서 중요한 개념인 함수 오버로딩과 가변인자 함수에 대해 알아보겠습니다.

함수 오버로딩

함수 오버로딩은 동일한 이름을 가진 여러 개의 함수를 정의하는 것을 말합니다. 각 함수는 서로 다른 매개변수 목록을 가져야 합니다. 즉, 함수 이름은 같지만 매개변수의 개수나 자료형이 다른 경우, 컴파일러는 이를 서로 다른 함수로 처리합니다.

예를 들어, 같은 이름의 함수를 정의할 때 매개변수의 자료형이나 개수를 달리하여 오버로딩할 수 있습니다.

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

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

위 예제에서는 print 함수가 두 번 정의되었는데, 하나는 정수를 받고 다른 하나는 실수를 받습니다. 함수를 호출할 때 전달하는 매개변수의 자료형에 맞는 함수가 호출됩니다.

함수 오버로딩은 코드를 보다 읽기 쉽고 직관적으로 만들어 주며, 유사한 작업을 수행하는 함수들을 하나의 이름으로 통일하여 관리할 수 있도록 해줍니다.

가변인자 함수

가변인자 함수는 임의의 개수의 인수를 받을 수 있는 함수를 말합니다. C++에서는 <cstdarg> 헤더 파일의 va_start, va_arg, va_end 매크로를 사용하여 가변인자 함수를 구현할 수 있습니다.

가변인자 함수의 가장 대표적인 예시로 printf 함수가 있습니다. printf 함수는 형식 지정자(%d, %f 등)를 사용하여 출력할 값들을 지정하는 데, 이때 인수의 개수에 제한이 없습니다.

void my_printf(const char* format, ...) {
    va_list args;
    va_start(args, format);
    while (*format != '\0') {
        if (*format == 'd') {
            int number = va_arg(args, int);
            cout << number << endl;
        } else if (*format == 'f') {
            double dnumber = va_arg(args, double);
            cout << dnumber << endl;
        }
        ++format;
    }
    va_end(args);
}

위 예제에서 my_printf 함수는 가변인자를 받아서 형식 지정자에 따라 출력합니다. 가변인자 함수를 사용하면 인수의 개수가 가변적인 상황에서도 유연하게 대응할 수 있습니다.

두 가지 기능인 함수 오버로딩과 가변인자 함수는 함께 사용될 때 코드의 유연성을 크게 향상시킬 수 있습니다. 이러한 특징들은 C++를 더욱 강력한 프로그래밍 언어로 만들고, 다양한 상황에 맞춰 유연하게 대응할 수 있도록 도와줍니다.

참고 문헌: