컴공생의 다이어리
[c++] 클래스의 객체 수 본문
생성된 총 클래스의 객체의 수를 세기 위한 방법에는 2가지가 있다. 첫번째는 어떠한 배열에 객체를 보관해놓고, 생성된 객체의 수를 모두 세는 것이다. 두번째는 어떤 변수를 만들어서 객체 생성시에 1을 더하고, 소멸시에 1을 빼는 것이다. 첫번째 방법의 경우 vector라는 자료를 사용하면 쉽게 할 수 있다. 두번째의 경우 전역 변수를 사용하거나 static 멤버 변수를 사용해 해결할 수 있다.
어떤 변수를 만들어서 객체 생성시에 1을 더하고, 소멸시에 1을 빼는 것을 전역 변수를 통해 관리하면, 프로젝트의 크기가 커질 수록 프로그래머의 실수로 인해 서로 겹쳐서 오류가 날 가능성이 다분하다. 따라서 전역 변수 같지만 클래스 하나에만 종속되는 변수인 static 멤버변수를 사용하는 것이 좋다.
static 변수가 지역 변수들 처럼 함수가 종료될 때 소멸되는 것이 아니라 프로그램이 종료될 때 소멸되는 것 처럼, 어떤 클래스의 static 멤버 변수의 경우, 멤버 변수들 처럼, 객체가 소멸될 때 소멸되는 것이 아닌, 프로그램이 종료될 때 소멸되는 것이다. 또한 이 static 멤버 변수의 경우, 클래스의 모든 객체들이 공유하는 변수로써 각 객체 별로 따로 존재하는 멤버 변수들과는 달리 모든 객체들이 하나의 static 멤버 변수를 사용하게 된다.
static int total_num;
위와 같이 클래스 static 변수를 정의했다고 가정하자. 모든 전역 및 static 변수들은 정의와 동시에 값이 자동으로 0으로 초기화되기 때문에 이 경우 굳이 따로 초기화 하지 않아도 되지만 클래스 static 변수들의 경우 아래와 같은 방법으로 초기화 해야 한다.(클래스 이름을 TEST라고 가정한다.)
int TEST::total_num=0;
static 함수는 어떤 객체에 종속되는 것이 아니라 클래스에 종속되는 것으로, 따라서 이를 호출하는 방법도 (객체).(멤버 함수)가 아닌 (클래스)::(static 함수)형식으로 호출하게 된다. 왜냐하면 어떠한 객체도 이 함수를 소유하고 있지 않기 때문이다. 그러기에, static 함수내에서는 클래스의 static 변수만을 이용할 수 밖에 없다.
void TEST::show_total() {
std::cout << "전체 수 : " << total_num << std::endl;
}
TEST 클래스의 show_total()함수를 호출하려면 아래와 같이 호출하면 된다.
TEST::show_total();
'Development > C & C++' 카테고리의 다른 글
[c++] const 함수 (0) | 2020.12.27 |
---|---|
[c++] 레퍼런스를 리턴하는 함수 (0) | 2020.12.27 |
[c++] 함수의 오버로딩 (0) | 2020.12.27 |
[c++] 객체, 클래스 (0) | 2020.12.18 |
[c++] 메모리 할당과 해제 (0) | 2020.12.18 |