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 |