C++ 클래스에는 정적(static) 멤버, 즉 정적 함수나 정적 변수를 선언할 수 있습니다. 이 중 정적 변수는 클래스 내부에서 선언만 가능하며, 실제 메모리 할당과 초기화는 반드시 클래스 정의 외부에서 이루어져야 합니다.
정적 멤버 변수를 초기화하려면 클래스 이름 뒤에 범위 지정 연산자(::)를 붙이고, 그 다음에 변수 이름을 명시한 후 원하는 값을 대입하면 됩니다. 이렇게 초기화된 정적 변수는 프로그램 전체에서 단 하나의 복사본만 유지되며, 모든 객체가 이 값을 공유하게 됩니다.
다음 예제 코드는 정적 멤버 변수의 초기화 기법을 보여줍니다. 생성자가 호출될 때마다 정적 변수 값이 1씩 증가하므로, 지금까지 생성된 객체의 개수를 손쉽게 추적할 수 있습니다.
예제 코드
#include <iostream>
using namespace std;
class MyClass {
private:
static int st_var; // 정적 멤버 변수 선언
public:
MyClass() {
st_var++; // 새 객체가 생성될 때마다 st_var 값 증가
}
static int getStaticVar() {
return st_var;
}
};
int MyClass::st_var = 0; // 클래스 외부에서 정적 변수 초기화
main() {
MyClass ob1, ob2, ob3; // 세 개의 객체 생성
cout << "Number of objects: " << MyClass::getStaticVar();
}실행 결과
Number of objects: 3
위 코드에서 ob1, ob2, ob3 세 개의 객체가 생성되면서 생성자가 세 번 호출되고, 호출될 때마다 st_var가 1씩 증가하여 최종적으로 3이 출력됩니다. 이처럼 정적 멤버 변수는 객체별로 존재하는 것이 아니라 클래스 전체에 하나만 존재하기 때문에, 객체 생성 횟수와 같은 공통 상태를 관리하는 데 매우 유용합니다.