(2022) 공부 (Study)/게임 개발 (Development)

[C++] 정적(static) 키워드의 개념과 활용

수낭 2022. 4. 20. 16:12

 

1. 정적(static) 멤버 변수

- class 내에서 선언만 가능, 정의는 불가능
- 전역 scope에서만 정의(초기화) 할 수 있다.
* 모든 객체가 공유해야 하므로, 프로그램 전체 영역에서 메모리가 유지되어야 한다.
* 선언은 class 영역에서 되어지지만, 정의는 파일 영역(전역)에서 수행된다.
* 해당 class의 멤버 함수, 혹은 friend class만 접근 가능하다.
@ static 멤버 변수의 초기화는, header 파일이 아닌, cpp 파일에서 해주어야 한다.
(include할 때마다, 초기화가 되는 비효율적인 동작 방지)

프로그램 전체 영역에서 메모리가 유지되어야 하므로, cpp 파일에서 별도 초기화를 해줘야 한다.
CCore::m_app = nullptr;

※ class 내부에서는 선언만 가능하고, 초기화는 불가능한 것에 주의.

 

2. 정적(static) 멤버 함수

- 객체(instance)가 아닌 class 자체에 종속된다.
- static 멤버 변수만을 접근할 수 있다.
@ static WndProc( ) → static CCore* m_app m_app->MyProc( )
SINGLETON에서는 위와 같은 형태로 static 멤버 함수를 활용했었다.

함수 자체는 data 영역에 따로 존재하지만, 접근은 해당 class를 통해서만 가능한 것에 주의.

 

SINGLETON의 static 활용 예시

class CCore
{
public:
	static type* GetInst()
	{
		static type mgr;
		return &mgr;
	}
private:
	type();
	~type();
}

SINGLETON에서의 static 키워드 사용은 위와 같습니다.

 

이상으로 포스팅을 마치겠습니다! ⌒_⌒