반도체/C++

20.C++ 템플릿과 함수 오버로딩의 차이

Clair_de_Lune 2024. 7. 31. 12:17
728x90

1. 정의

  • 템플릿: 템플릿은 함수나 클래스를 정의할 때 데이터 타입을 일반화하여 여러 타입에 대해 동일한 로직을 적용할 수 있게 해줍니다. 템플릿은 컴파일 시간에 인스턴스화되어 특정 타입에 맞는 코드로 변환됩니다.
  • 함수 오버로딩: 함수 오버로딩은 같은 이름의 함수를 여러 개 정의하되, 매개변수의 타입이나 개수를 다르게 하여 서로 다른 기능을 수행할 수 있게 합니다. 즉, 함수의 이름은 같지만 매개변수의 목록이 다릅니다.

 

  • 템플릿 예제:
    template <typename T>
    T add(T a, T b) {
        return a + b;
    }
    
  • 함수 오버로딩 예제:
    int add(int a, int b) {
        return a + b;
    }
    
    double add(double a, double b) {
        return a + b;
    }

3. 타입 결정 시점

  • 템플릿: 템플릿은 함수가 호출될 때마다 매개변수의 타입에 따라 새로운 버전이 생성됩니다. 즉, 각 호출 시점에 타입이 결정됩니다.
  • 함수 오버로딩: 오버로딩된 함수는 호출 시점에 매개변수의 타입에 따라 적절한 함수를 선택합니다. 모든 오버로딩된 함수는 동일한 이름을 가지지만, 컴파일러가 전달된 인자에 따라 적합한 함수를 결정합니다.

4. 유연성

  • 템플릿: 템플릿은 다양한 데이터 타입에 대해 동일한 로직을 적용할 수 있어 매우 유연합니다. 예를 들어, add 템플릿 함수는 int, double, string 등 다양한 타입에 대해 사용할 수 있습니다.
  • 함수 오버로딩: 오버로딩은 각 타입에 대해 별도의 함수를 정의해야 하므로, 추가적인 코드가 필요합니다. 즉, 새로운 타입을 추가할 때마다 별도의 함수를 작성해야 합니다.

5. 제약 사항

  • 템플릿: 템플릿은 타입에 대한 특정 제약 사항을 추가할 수 있지만, 기본적으로 모든 타입을 사용할 수 있습니다. 하지만 특정 연산이 가능한 타입이어야 합니다.
  • 함수 오버로딩: 오버로딩은 매개변수의 타입이나 개수를 변경하는 방식으로 제한되므로, 타입에 따라 별도의 함수로 구현해야 합니다.
728x90

'반도체 > C++' 카테고리의 다른 글

21. && 논리 AND 연산자 (Logical AND Operator):  (1) 2024.08.14
C#과 C++의 객체 지향 개념 차이  (1) 2024.08.01
19. C++의 객체지향 4가지  (0) 2024.07.31
18. C++의 형변환 (2) 안정성  (79) 2024.07.29
18. C++의 형변환 (1)  (1) 2024.07.29