열렬히.뛰기

static 변수

Language > 프로그래밍 언어 > C++ > Cpp : 기초 > static 변수

static의 특징

C++에서 static 변수는 클래스 또는 함수 내에서 사용되며, 해당 변수는 프로그램 실행 동안 유지되는 전역 변수

어디에 사용 되는지에 따라 다른 특징을 가지므로, 혼동하기 쉬운 키워드 이다.

static과 메모리

  • static 변수는 메모리의 data 영역에 저장됨.
  • 프로그램이 실행될 때 생성되고, 프로그램이 종료될 때 반환
  • 컴파일 할 때 결정됨.

기타 지식

  • heap 영역 : 동적 할당된 변수
  • stack 영역 : 지역변수, 매개변수, return 주소
  • code : 프로그램의 코드 그 자체

전체 범위의 static

어떻게 쓰는가?

모든 객체가 공유하는 멤버변수

  • 객체 생성 전에도 메모리 존재
    • 따라서 객체 생성 전에 반드시 미리 초기화를 해주어야 한다.
    • 반드시 전역범위에서 초기화를 해야 한다.
    • 객체와는 독립적으로 존재한다.
  • 객체 이름으로도 접근이 가능하지만 클래스 이름으로도 접근이 가능하다.
cpp
int Something::s_value = 1;
  • 어떤 특정 타입의 모든 객체들의 수나 모든 객체들이 알고 있고 공유할 수 있어야 하는 멤버 변수를 static으로 쓴다

클래스 내부의 static

  • 클래스 내에서 선언된 static 멤버 변수는 모든 클래스 객체가 공유
  • 해당 클래스의 모든 인스턴스에서 동일한 값을 가짐

어떻게 쓰는가?

  • 클래스 내부의 static에 private이 걸린 경우
    • 클래스 내부의 다른 메소드에서 접근하는 경우 : 그냥 쓴다.
    • 클래스 외부에서 접근하는 경우 : get__() 형식의 메소드로 접근한다.

함수 내부의 static

  • 한 번만 초기화된다.
  • 이후에 해당 함수를 호출하면, 이전 값이 유지됨.