[C++] static 멤버 변수

우니·2022년 10월 27일
0

static 멤버 변수란?

: 모든 객체가 한 메모리를 공유하는 멤버 변수.

일반 멤버변수는 클래스의 인스턴스가 메모리에 될때마다 생성되는데 비해 static 멤버변수는 인스턴스와 수와 상관없이 클래스마다 딱 하나씩만 메모리에 생성된다.

모든 객체들이 알고 있고 공유할 수 있어야 하는 멤버 변수를 static으로 쓴다.


class Student
{
	public:
    	Student(char *_name, int _age);
        ~Student(void);
        static int GetCount(void);
     
     private:
     	int age;
        char name[10];
        static int count;
}

static 멤버변수를 선언할 때 주의사항은 클래스를 선언할 때 변수선언을 하는 것으로 끝내며 안된다. 클래스를 선언하는 부분 밖에서 한번 더 변수선언을 해줘야한다.

int Student::count = 0; //객체 이름, 클래스 이름 둘다 접근 가능

static 멤버변수는 클래스의 인스턴스가 생성될 때 메모리에 저장공간이 만들어지지 않기 때문에 메모리에 저장공간을 만드는 작업을 별도로 해줘야하기 때문이다.

이때 전역변수를 선언하는 것처럼 함수 밖에서 선언하기 때문에 프로그램이 시작도리 때부터 종료될 때까지 메모리에 존재하게 된다.

여기서 우리는 선언과 정의의 차이를 알아야한다.

선언

  • 컴파일러에게 변수의 정보만을 준다
  • 실제 메모리를 사용하지 않는다
  • 예를들어
class Student
{
	public:
    	Student(char *_name, int _age);
        ~Student(void);
        static int GetCount(void);
     
     private:
     	int age;
        char name[10];
        static int count; //선언
}

아까 전에 봤던 코드는 static 멤버변수 count의 존재가 있다는 것을 컴파일러에게 알려준것일 뿐이다.

정의

  • 실제 메모리가 할당된다.
  • 초기화 하는것은 메모리에 값을 넣는것이니 정의해주는 과정이다.

또한 static 멤버변수는 헤더 파일에서 정의 할 수 없다.
이유 : 여러 곳에서 헤더 파일을 include할 때 마다 static 멤버 변수를 여러번 정의 및 초기화 하는게 될테니까
그러므로 반드시 cpp 파일에서 초기화를 해주자.

참고

0개의 댓글