본문 바로가기

Cpp

Static

static

 

static 키워드는 블록 내에서 선언된 지역 변수에서도 사용할 수 있다. 지역 변수는 '자동 주기(auto duration)'를 가지며, 정의되는 시점에서 생성되고 초기화되며, 정의된 블록이 끝나는 지점에서 소멸한다. static 키워드를 사용한 지역 변수는 완전히 다른 의미가 있다. static 키워드를 사용한 지역 변수는 '자동 주기(auto duration)'에서 '정적 주기(static duration)'로 바뀐다. 이것을 정적 변수(static variable)라고도 부르는데, 생성된 스코프(=범위)가 종료한 이후에도 해당 값을 유지하는 변수다. 또한, 정적 변수는 한 번만 초기화되며 프로그램 수명 내내 지속된다.

 

프로그램을 시작하면 메모리 할당, 종료시 해제

 

 

정적 전역 변수
초기화를 안하면 0으로 초기화된다.
초기화가 한번만 진행된다.
매개변수로 사용할 수 없다.
프로그램 시작시 생성 및 초기화 되고 프로그램이 끝날 때 사라진다.
선언되어 있는 소스 파일에서만 사용이 가능하다.
외부에서는 가져가서 사용이 불가능하다.
static 을 붙이면 변수의 범위를 파일 범위로 제한하기 때문.

 

정적 전역 상수
전역 상수와 다르게 초기화를 안하면 0으로 초기화된다.
초기화가 한번만 진행된다.
매개변수로 사용할 수 없다.
프로그램 시작시 생성 및 초기화 되고 프로그램이 끝날 때 사라진다.
선언되어 있는 소스 파일에서만 사용이 가능하다.
외부에서는 가져가서 사용이 불가능하다.

 

정적 지역 변수
중괄호 내부에서만 사용할 수 있다.
초기화 안하면 0 값이 들어간다.
처음 초기화 후 함수 호출 시 값의 초기화를 무시한다.
값 변경은 가능 함수 호출 시에만 초기화 무시.
프로그램이 종료되기 전까지 메모리가 소멸되지 않는다.
함수를 벗어나도 변수가 사라지지 않는다.

 

정적 지역 상수
중괄호 내부에서만 사용할 수 있다.
초기화 안하면 0 값이 들어간다.
처음 초기화 후 함수 호출 시 값의 초기화를 무시한다.
프로그램이 종료되기 전까지 메모리가 소멸되지 않는다.
함수를 벗어나도 변수가 사라지지 않는다.
값 변경이 완전 불가능하다.

 

정적 멤버 변수
객체 별로 할당되지 않고 클래스의 모든 객체가 공유하는 멤버.
해당 클래스의 모든 객체에 대해 하나의 데이터만이 유지 관리.
선언은 클래스 영역에서 한다. 정의 및 초기화는 파일 영역,
클래스 밖에서 정의한다. 해당 클래스의 cpp 파일에서 초기화하는게 좋다.
객체 생성전에 반드시 미리 초기화

 

정적 멤버 상수
모든 객체들이 공유하며 값 변경이 불가능합니다.
클래스 밖에서 초기화 합니다.
객체 생성전에 반드시 미리 초기화

 

정적 전역 함수
소스 파일 내에서만 호출 할 수 있는 함수.

 

정적 멤버 함수
const 사용이 불가능하다.
thiscall 방식이 아니기 때문에 멤버 접근이 불가능하기 때문이다.
어떤 객체가 자신을 호출 했는지를 알려줄 this 포인터가 전달이 되질 않기 때문
static 멤버는 접근 가능.

'Cpp' 카테고리의 다른 글

추상클래스  (0) 2023.02.27
외부링크 내부링크  (0) 2023.02.23
변수주기  (0) 2023.02.23
스택 프레임(stack frame)  (0) 2023.02.23
프로그램의 실행 과정 메모리 구조  (0) 2023.02.23