static 클래스 멤버

Programming/C++ Language 2010. 3. 19. 14:21
클래스의 각 객체는 자신만의 클래스 데이터 멤버의 복사본을 갖는다. static 클래스 변수는 한 변수에 대해 하나의 복사본만 만들어져 클래스의 모든 객체가 공유한다. 즉, static 클래스 변수는 클래스전체 에 사용되는 정보를 나타낸다. 클래스 스코프를 갖는다고 말할수 있다.
스타크래프트를 예로 들었을 때, Terran Unit 이라는 상위 클래스가 있고, 자식 클래스가 Marine, Madic 이 있다고 했을 때, 테란의 전체 유닛의 수를 알기 위해서는 Terran Unit 에 static int nUnitNum; 이 있으면, 테란의 Marine 이나 Madic 이 생성/소멸 때 마다 소멸자에서 nUnitNum 을 증가/감소 시켜주면 테란의 총 유닛의 수를 알수 있다. 또는 Supply 라는 클래스에 int static nSuplNum 을 두고, Supply 가 생성/파괴 될 때 마다, 이 값을 증가/감소 시켜주면, 총 Supply 개수를 알수 있게 된다.
이와 같이, 데이터가 하나의 복사본만으로 충분하다면, static 데이터 멤버를 사용하여 메모리 공간을 절약할 수 있다.

static 멤버는 public, protected, private 로 선언될 수 있으며, 해당 클래스 정의의 몸체가 아닌 파일 스코프에서 반드시 단 한 번만 초기화되어야 한다. 클래스의 private / protected static 멤버는 그 클래스의 public 멤버 함수나 friend 를 통해서 접근되어야 한다. 클래스의 객체가 없을 때에도 접근이 가능한데 이는 클래스이름::변수이름 의 형식으로 접근 가능하다.

-- .h --
class Employee{
public:
static int getCount();
private:
static int count();
}

-- .cpp --
#include .h
int Employee::count = 0; // static 멤버의 정의와 초기화

int Employee::getCount()
{
return count;
}

'Programming > C++ Language' 카테고리의 다른 글

[C++] const  (0) 2010.03.19
[C++] 다양한 생성자 초기화 방법  (0) 2010.03.19
namespace  (0) 2010.03.19
연산자 오버로딩  (0) 2009.09.30
순수 가상 함수  (0) 2009.09.26

설정

트랙백

댓글