본문 바로가기
WORK/Sotfware

[C언어] 지역 변수, 전역 변수, 정적 변수

by KANG Stroy 2020. 12. 18.
728x90
728x90

변수에 대해서 이야기를 많이 들었을 것입니다. 


지역 변수

한마디로 말하면 지역, 한곳의 왕이 되는 겁니다. 지역구 의원들이 바로 지역 변수가 되겠내요. 


전역 변수


사전적으로 찾아 봤습니다. 

어느 지역의 전체를 나타냅니다. 하나의 공간에서 왕이 되는거죠. 시도 지사가 되겠내요. 여러 C 파일이 있으다면 그 파일 하나에서는 모든 힘을 과시 하게 됩니다. 



정적 변수


정적 변수는 무엇인가? 

사전적으로 봤을 때는 움직임이 없는 상태를 말합니다. 


국회의원 같은데? 시도 지사 같고, 시도 지사라고 말하기에는 애매한 녀석이 됩니다. 


지역, 전역 변수는 나타내는 방법은 동일합니다. 


char a; 

int b; 

이렇게 표시를 하게 됩니다. 


정적 변수는 하나를 더 써줍니다. 왜? 애매하니깐요.. 


static char a;

static int b; 

애매한 녀석이, 애매한 짓을 못하게 이름을 적어 주는거죠.. 무슨 소리냐? static 의 동작은 지역 변수의 위치에 있으면서, 전역 변수 같이 사용이 되는 겁니다. 


char count_2 = 0;         // 전역 변수 

void count_add_2(void)

{

char count = 0;         // 지역 변수

count++;

printf("count 2 %d\r\n",count);

}

그럼 정적 변수는 ? 


void count_add(void)

{

static char count = 0; 

count++;

printf("count %d\r\n",count);

}

보시는것과 같이 count_add_2 와 동일하게 쓰여져 있습니다. 


그럼 출력을 한번 해 볼까요? 


int main(int argc, char** argv) {

   

    count_add();

    count_add();

    count_add();

    count_add();

    count_add();

        

    count_add_2();

    count_add_2();

    count_add_2();

    count_add_2();

    count_add_2();


    return 0;

}

똑같이 5번을 출력해 보겠습니다. 



아시겠나요? 

static 이 적용된 함수는 변수가 지역 변수의 위치에 있지만, 전역 변수처럼 동작이 되는 겁니다. 


static 키워드를 사용하는 이유는? 

자주 변하지 않는 일정한 값이나 설정 정보같은 공용자원에 대한 접근에 있어서 매번 메모리에 로딩하거나 값을 읽어들이는 것보다 일종의 '전역 변수'와 같은 개념을 통해서 접근하는 것이 비용도 줄이고 효율을 높일 수있다.

이렇게들 정의를 합니다. 그러나 이게 왜? 라는 생각도 해 보았지요. 


전역 변수를 많이 쓰고 싶지않고, 그곳 한 곳에서만 쓴다면? 사용하는것도 좋을거 같내요. 

728x90

댓글