이번 튜토리얼에서는 C++에서 템플릿(template)과 정적 변수(static variable)가 어떻게 상호작용하는지 예제 프로그램을 통해 알아보겠습니다.
C++에서 함수 템플릿이나 클래스 템플릿을 사용할 때 중요한 특징 중 하나는, 각각의 템플릿 인스턴스(instantiation)가 정적 변수에 대한 독립적인 복사본을 가진다는 점입니다. 즉, 동일한 템플릿이라도 타입 인자가 다르면 서로 다른 정적 변수가 생성됩니다.
예제 코드
#include <iostream>
using namespace std;
template <typename T>
void fun(const T& x) {
static int i = 10;
cout << ++i;
return;
}
int main() {
fun<int>(1); // 11 출력
cout << endl;
fun<int>(2); // 12 출력
cout << endl;
fun<double>(1.1); // 다시 11 출력
cout << endl;
getchar();
return 0;
}실행 결과
11
12
11코드 설명
fun<int>를 처음 호출하면 해당 인스턴스 전용의 정적 변수 i가 10으로 초기화되고, 전위 증가 연산자(++i)에 의해 11이 출력됩니다. 두 번째 fun<int> 호출에서는 같은 인스턴스의 정적 변수가 그대로 유지되므로 값이 12로 증가합니다.
반면 fun<double>은 fun<int>와는 완전히 별개의 함수 인스턴스이기 때문에, 자신만의 새로운 정적 변수 i를 가지며 다시 10으로 초기화된 후 11이 출력됩니다.
이처럼 템플릿의 정적 변수는 템플릿 인스턴스마다 독립적으로 존재한다는 점을 기억하면, 템플릿 기반 코드에서 정적 변수의 동작을 정확하게 예측할 수 있습니다.