Home C++ 제네릭 함수란?
Post
Cancel

C++ 제네릭 함수란?

C를 사용하다가 C++로 넘어와서 공부를 시작한 사람이라면 알겠지만 C++은 C와 비슷하지만 C에서 불편한 점들을 개선하거나 바꾼 여러 기능들이 추가적으로 탑재되어 있다 이번 글에서 그 중 특정 상황에서 함수를 작성할 때 코드 재사용성을 매우 높일 수 있는 C++의 제네릭 함수에 대해 소개하려고 한다

제네릭 함수란?

우선 제네릭 함수란 다양한 데이터 타입에 대해 동일한 로직을 적용할 수 있는 함수를 말한다 C++에서는 템플릿이라는 기능을 통해 제네릭 함수를 구현할 수 있는데 이 템플릿을 사용하면 하나의 함수나 클래스가 다양한 타입의 변수들과 함께 작동할 수 있게 되어 앞서 말했듯 코드 재사용성을 매우 높일 수 있다

기본 구조

이제 이러한 제네릭 함수를 만들기 위해서 C++의 템플릿을 사용하여 제네릭 함수를 정의하는 기본 구조를 살펴보겠다

1
2
3
4
template <typename T>
T functionName(T param) {
    // 함수 본문
}
1
template <typename T>

이 부분은 함수가 템플릿이며 T라는 이름의 타입을 매개변수로 사용할 것임을 정의하는 부분이고

1
T functionName(T param) 

이곳은 함수의 선언 부분으로 여기서 T는 함수의 반환 타입과 매개변수의 타입을 나타낸다

제네릭 함수의 장점

그럼 다음으로 넘어가서 제네릭 함수의 장점을 살펴보면

코드 재사용성 증가

1
2
3
4
5
6
7
8
9
10
void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}
void swap(char& a, char& b) {
    double temp = a;
    a = b;
    b = temp;
}

c에서 같은 함수라고 해도 다른 타입을 지원하기 위해서는 이렇게 중복되는 코드를 타입만 다르게 해서 또 작성해야 하는 문제가 있는데 이러한 경우에 제네릭 함수는 하나의 함수로 여러 타입에 대응할 수 있어서 코드의 중복을 줄일 수 있다

타입 안전성

템플릿은 컴파일 시간에 타입 체크가 이루어져 실행 시간의 오류를 미리 방지할 수 있다

제네릭 함수 예제

마치기 전 간단한 제네릭 함수 예제를 통해 제네릭 함수를 살펴보고 끝내겠다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;

template <typename T>
T findMax(T arr[], int size) {
    T max = arr[0];
    for (int i = 1; i < size; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}

int main() {
    int arr1[] = {10, 20, 15, 25, 30};
    double arr2[] = {3.14, 1.59, 2.65, 3.77, 4.31};

    cout << "Int 배열 max 값: " << findMax(arr1, 5) << endl;
    cout << "Double 배열 max 값: " << findMax(arr2, 5) << endl;

    return 0;
}

위 코드에서 findMax 함수는 정수 배열과 실수 배열 모두에 대해 최대값을 찾을 수 있는 함수로 템플릿을 통해 T라는 제네릭 타입을 사용하여 다양한 데이터 타입에 대해 유연하게 함수를 적용하였다

결론

제네릭은 여러 타입을 지원할 수 있는 기능으로 C++을 비롯한 많은 현대 프로그래밍 언어에서 중요한 개념 중 하나이기에 효율적인 개발을 위해서는 해당 개념을 반드시 이해하고 사용할 수 있어야 한다

This post is licensed under CC BY 4.0 by the author.

12월 15일 Today I Learned

12월 16일 Today I Learned