static의 특징
C++에서 static 변수는 클래스 또는 함수 내에서 사용되며, 해당 변수는 프로그램 실행 동안 유지되는 전역 변수
어디에 사용 되는지에 따라 다른 특징을 가지므로, 혼동하기 쉬운 키워드 이다.
static과 메모리
- static 변수는 메모리의 data 영역에 저장됨.
- 프로그램이 실행될 때 생성되고, 프로그램이 종료될 때 반환
- 컴파일 할 때 결정됨.
기타 지식
- heap 영역 : 동적 할당된 변수
- stack 영역 : 지역변수, 매개변수, return 주소
- code : 프로그램의 코드 그 자체
전체 범위의 static
어떻게 쓰는가?
모든 객체가 공유하는 멤버변수
- 객체 생성 전에도 메모리 존재
- 따라서 객체 생성 전에 반드시 미리 초기화를 해주어야 한다.
- 반드시 전역범위에서 초기화를 해야 한다.
- 객체와는 독립적으로 존재한다.
- 객체 이름으로도 접근이 가능하지만 클래스 이름으로도 접근이 가능하다.
cpp
int Something::s_value = 1;
- 어떤 특정 타입의 모든 객체들의 수나 모든 객체들이 알고 있고 공유할 수 있어야 하는 멤버 변수를
static으로 쓴다
클래스 내부의 static
- 클래스 내에서 선언된 static 멤버 변수는 모든 클래스 객체가 공유
- 해당 클래스의 모든 인스턴스에서 동일한 값을 가짐
어떻게 쓰는가?
- 클래스 내부의 static에 private이 걸린 경우
- 클래스 내부의 다른 메소드에서 접근하는 경우 : 그냥 쓴다.
- 클래스 외부에서 접근하는 경우 : get__() 형식의 메소드로 접근한다.
함수 내부의 static
- 한 번만 초기화된다.
- 이후에 해당 함수를 호출하면, 이전 값이 유지됨.