모든 객체가 공유하는 멤버 변수
객체 마다 공통된 데이터를 가지게 하려면 사용하는데 클래스 외부에서 초기화를 해야한다.
class Player {
public:
Player() {
id = IdGenerator++;
}
public:
int id;
static int IdGenerator;
}
// 전역 범위에서 초기화
int Player::IdGenerator = 1;
int main() {
// static 멤버 변수는 클래스 생성 없이 호출이 가능하다.
cout << Player::IdGenerator;
}
공통된 데이터를 static이 아닌 멤버 변수로 가지게 된다면 해당 변수의 메모리 크기 * 객체 수가 되기 때문에 공통된 데이터는 static을 통해서 메모리 공간을 1번만 차지하므로 메모리를 절약할 수 있다.
멤버 변수에 대한 접근이 불가능하며 static 변수만 접근 가능하다.
특정 객체에 대한 작업을 하는게 아니기 때문에 this 포인터 사용이 불가하다.
함수 도한 객체 생성 없이 호출이 가능하다.