템플릿은 제네릭 프로그래밍을 지원하기 위한 기능으로, 코드의 재사용성과 유연성을 향상 시켜줌.
템플릿을 사용하면 특정 데이터 타입에 의존하지 않고 코드를 작성할 수 있으며, 컴파일러가 사용 시점에 적절한 타입으로 치환해줌.
장점
- 유연성 : 다양한 데이터 타입에서 동작하는 코드 작성 가능
- 재사용성 : 동일한 로직 여러 타입에서 사용 가능
- 컴파일 타임 안정성 : 템플릿 코드의 타입이 컴파일 타임에 체크됨
단점
- 컴파일 시간 증가 : 템플릿 코드 인스턴스화 과정에서 컴파일 시간 늘어날 수 있음.
- 디버깅 어려움 : 템플릿 코드에서 발생하는 컴파일 오류는 복잡한 경우가 많다.
- 코드 크기 증가 : 다양한 타입으로 인스턴스화되면서 코드 크기가 증가할 수 있음.
주의 사항
- 템플릿은 컴파일 타임에 사용되는 데이터 타입으로 인스턴스화되므로, 정의가 컴파일 시점에 접근 가능해야 한다
- 템플릿 정의를 헤더 파일에 포함하는 이유는, 컴파일러가 정의를 인스턴스화 시점에 필요로 하기 때문
- 정의를 소스 파일에 두면 다른 소스 파일에서 이를 참조할 수 없으므로 링커 에러 발생.
함수 템플릿
- 데이터 타입에 의존하지 않는 함수를 작성할 수 있도록 한다.