C++ 템플릿의 배경:
- C++ 는 statically typed language 이다
- compile 시점에 type 이 확정되어야 한다
- 같은 동작을 하는 함수더라도 type 별로 함수를 코딩해야 했다
- Python 은 dynamically typed language 이다
- C++ 는 runtime overhead 를 최저로 줄였다
- Python 은 runtime 시점에 type 을 결정해야 하기 때문에 overhead 가 생긴다
C++ 템플릿의 용도:
- 틀을 만든다
- 같은 동작을 하고, type 만 달라지는 경우에 재사용이 가능한 틀을 만든다
- 필요한 것만 만든다
- 실제 type이 결정되고 생성이 필요한 함수만 만든다
C++ 템플릿과 객체지향:
- 객체지향의 다형성의 의미와 템플릿의 다형성 의미는 다르다:
- 객체지향의 다형성 (동적): runtime 시점에 동적으로 implementation 결정
- 가상 함수 (virtual function) 와 override 함수 와 좀 더 관련됨
- 템플릿의 다형성 (정적): compile 시점에 정적으로 type 결정
- 객체지향의 다형성 (동적): runtime 시점에 동적으로 implementation 결정
- 템플릿을 쓰면 성능 면에서 더 우위하다
- 런타임 시에 동적으로 해야 할 일을 컴파일 시에 정적으로 한다
C++ 템플릿 종류:
- 함수 템플릿:
template <class Type>
Type add(Type a, Type b) {
return a + b;
}
add<int>(10,20); // 이 시점 템플릿이 인스턴스화 됨
- 변수 템플릿:
template <class Type>
constexpr Type pi = Type(3.14159265359)
- 클래스 템플릿: 예시) std::vector
template <class Type>
class Pair {
public:
Pair(Type f, Type s) : first(f), second(s) {}
private:
Type first, second;
}
Pair<float> pair(0.5, 1.0);
- Variadic 템플릿:
// recursive
template <class Type, class... Args>
Type sum(Type n, Args... args) {
return n + sum(args...);
}
// base case for recursive
template <class Type>
Type sum(Type n) {
return n;
}
// type inferred
sum(1,2,3,4,5);
// 1 + sum(2,3,4,5)
// 1 + 2 + sum(2,3,4,5);
// ...
C++ 템플릿 사용 경험:
- Message Relay Service: A가 C를 통해 B를 호출 할 때, C가 B를 호출 할 때 A로부터 받은 가변 인자를 사용하기 위해서 (Perfect Forwarding)
- 예시: service framework
- 등록된 service의 API를 호출 시 해당 API가 어떤 인자를 받을지 모르니, variadic template을 사용해 caller 쪽에서 보낸 다양한 인자에 대응
- 예시: service framework
다음 글:
- C++ 면접 질문) "Virtual Function이 뭔가요? 관련해서 사용한 경험 있으시면 말씀해주세요."
- C++ 면접 질문) "Perfect Forwarding이 뭔가요? 관련해서 사용한 경험 있으시면 말씀해주세요."
'C++' 카테고리의 다른 글
C++ 면접 질문) "람다 함수 형식을 설명해주세요." (0) | 2025.01.08 |
---|---|
C++ 면접 질문) "boost asio를 사용하여 어떻게 event-driven architecture를 구현하셨나요?" (0) | 2025.01.08 |
C++ 면접 질문) "어떤 때 reference 쓰고 어떤 때 value를 써야 할까요?" (0) | 2025.01.07 |
C++ 면접 질문) "언제 Reference를 쓰고 언제 Pointer를 써야 할까요?" (0) | 2025.01.06 |
C++ 면접 질문) "C++에서 Reference 와 Pointer의 차이점은?" (0) | 2025.01.06 |