static - 정적선언
class GameLoop
{
public:
static GameLoop * getInstance() { static GameLoop instance; return &instance; }
void run();
private:
GameLoop() { }
};
- 정적 선언으로 컴파일시 스택에 메모리가 잡히게 된다.
- 보통 멤버 변수는 그 함수나 클래스가 실행시 메모리에 잡히게 되는데
- static로 선언하면 컴파일시 스택에 메모리가 잡혀서
- 클래스가 종료 되어도 메모리에 남아 있게 되어 그 클래스를 후에 다시 호출해도
- static로 선언된 변수는 다시 생성되는 것이 아니고 처음에 생성된 값으로 연산
- 전역변수로 선언해도 같은 결과인데 전역 변수 선언은 객체지향의
- 캡슐화를 어기는 결과이다.
- 위와 같은 소스는 GameLoop()의 생성자가 private로 선언 되어 있으므로
- 그 클래스 안에서만 사용될 수 있으므로 main에서 GameLoop a; 로 선언하면
- 객체 a생성시 생성자가 호출하게 되는데 private로 선언되어 있으므로 에러가 난다.
- 그러므로 GameLoop안에서 그 자신을 가리키는 static로 멤버 함수를 선언해서
- main에서는 getInstance를 호출해서 사용할 수 있고 이는 단 하나의 객체만을
- 생성할 수 있는 결과이다. 이것은 singleton패턴의 기초형이다.
- static로 선언된 변수는 상속 받은 클래스에서 사용할 수없으므로
- static으로 선언하고 나서 그 선언된 클래스 밖에서 따로 초기화를 해줘야만
- 상속받은 클래스에서 사용할 수 있다.
EX)
class init
{
public:
static float y[5];
};
float init::y[5] = {0.0,1.5,3.0,4.5,6.0};
'기타 > Programming Base Knowledge' 카테고리의 다른 글
C++ 기본 지식 (0) | 2009.05.02 |
---|---|
라이브러리 추가 (0) | 2009.05.02 |
cin.get() (0) | 2009.05.02 |
ifndef. define (0) | 2009.05.02 |
유니코드 사용 (0) | 2009.05.02 |