C/C++에서의 static 선언
static키워드를 사용하게 되면, static키워드를 선언한 변수는 전역변수와 유사하게 사용이 가능하다.
사실 전역 변수와 그 성격이 같다.
static키워드를 사용하게 되면, 프로그램 시작과 동시에 할당 및 초기화가 되고, 프로그램이
종료될 때까지 메모리 공간에 남아있게 된다.
static변수가 전역변수랑 그 성격이 같은데 왜 전역변수 대신에 static 변수를 사용하는지
의문이 들 것이다.
그것은 static변수가 전역변수에 비해서 좀 더 안정적인 코드를 작성 할 수 있게 해준다.
아래 예시 코드를 보자.
#include<iostream>
using namespace std;
void simple(void)
{
static int number = 0; //static 변수 선언
int number2 = 0; // 지역변수 선언
number++;
number2++;
cout << "static 변수 : " << number<< " 지역변수 : " << number2 << endl;;
}
int main()
{
for (int i = 0; i < 5; i++)
simple();
return 0;
}
number을 static변수로, number2를 지역변수로 선언했다.
number2의 경우에는 simple(); 이라는 함수의 호출동안 존재하고, 함수의 호출이 종료되었을 때,
소멸하는 변수이다.
그러나 number의 경우에는 static으로 선언되었기 때문에, 함수의 소멸과 상관없이 메모리상에
계속 존재한다.(정확히는 프로그램 종료시까지 메모리상에 존재한다.)
따라서 실행 결과는 아래와 같다.
static 변수(number)는 계속 메모리상에 존재하기 때문에, 이전의 증가 연산에 대한 값을 계속 유지하고 있지만, number2의 경우에는 함수 호출 시마다 새로 선언되어서 결과가 항상 1로 일정한 것을 볼 수 있다.
static으로 선언한 number 변수는 함수 내에 존재하는 것이 아니다.
simple 함수 내의 static int number=0; 이라는 것은 static 변수 number의 접근의 범위를 simple 이라는 함수 안에서만 가능하게 한 것이다.
즉, 전역 변수처럼 프로그램 종료 이전까지 메모리상에 존재하지만,
접근할 수 있는 범위에 제한을 둔 것이다.
static변수를 사용하는 것이 전역변수를 사용하는 것 보다 코드의 안정성을 높혀준다.
따라서 전역변수를 static변수로 대체할 수 있는 경우라면,
전역변수 말고 static변수를 사용해 주는 것이 좋다.
'컴퓨터 > C\C++' 카테고리의 다른 글
[C/C++]C++ 이차원 배열 동적할당 (0) | 2021.07.11 |
---|---|
[C++ STL]pair 클래스 사용방법 (0) | 2021.06.05 |
[c언어/c++] isdigit 함수(숫자를 판별하는 함수) (0) | 2021.05.15 |
[C++]1-1.상속(Inheritance)[feat. 급여관리] (0) | 2021.05.07 |