C++ 정적 멤버 변수란?
C++에서 정적(static) 멤버 변수는 static 키워드를 사용하여 정의합니다. 정적 멤버 변수는 메모리에 단 하나의 복사본만 존재하기 때문에, 클래스로부터 생성되는 객체의 수와 관계없이 모든 객체가 이 변수를 공유하게 됩니다.
또한 정적 멤버 변수를 별도로 초기화하지 않으면, 해당 클래스의 첫 번째 객체가 생성되는 시점에 자동으로 0으로 초기화됩니다.
예제 코드
다음 예제는 C++에서 정적 멤버 변수를 선언하고 초기화하는 과정을 보여줍니다.
#include <iostream>
using namespace std;
class Demo {
public :
static int num;
int display() {
cout << "The value of the static member variable num is: " << num;
}
};
int Demo::num = 100;
int main() {
Demo obj;
obj.display();
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
The value of the static member variable num is: 100
코드 분석
1. 클래스 정의 및 정적 변수 초기화
Demo 클래스 내부에는 정적 멤버 변수 num이 선언되어 있으며, display() 함수는 num의 값을 화면에 출력하는 역할을 합니다.
중요한 점은 정적 멤버 변수는 클래스 내부에서 선언만 할 수 있고, 실제 메모리 할당과 초기화는 클래스 외부에서 범위 지정 연산자(::)를 사용하여 수행해야 한다는 것입니다. 위 코드에서는 int Demo::num = 100;을 통해 num을 100으로 초기화했습니다.
class Demo {
public :
static int num;
int display() {
cout << "The value of the static member variable num is: " << num;
}
};
int Demo::num = 100;2. main() 함수의 동작
main() 함수에서는 Demo 클래스의 객체 obj를 생성한 뒤, display() 함수를 호출하여 정적 멤버 변수 num의 값을 출력합니다.
int main() {
Demo obj;
obj.display();
return 0;
}핵심 정리
- 정적 멤버 변수는 모든 객체가 공유하는 단일 복사본으로 존재합니다.
- 클래스 내부에서는 선언만 하고, 클래스 외부에서
::연산자를 통해 정의 및 초기화해야 합니다. - 별도의 초기화가 없으면 첫 번째 객체 생성 시점에 0으로 자동 초기화됩니다.
- 객체를 생성하지 않고도
Demo::num형태로 직접 접근할 수 있습니다.