본문 바로가기

공통

전역변수와 지역변수

 

이번시간에는 전역변수와 지역변수를 알아볼까 합니다

"전역변수"와 "지역변수"라는 말에 공통으로 들어가는 말이 있죠!

바로 "변수"입니다. 프로그래머라면 변수라는 말을 참 많이 들으실텐데요

그 변수 맞습니다. 자 그럼 우선 아래 코드를 보시죠

 

int a = 0;
    
if( a == 0 )
{
    int b = 3;
}

b = 5;

이런 코드를 실행하면 어떻게 될까요?

위 코드는 에러를 발생시키는 코드입니다.

그 이유는 b는 if문의 "지역변수"이기 때문인데요

우리가 흔히 함수에서 쓰던 {} 중괄호 기억하시나요?

이 중괄호가 열린 이후에 생성된 변수는

그 중괄호가 닫힐때까지 존재하고

중괄호가 닫히는 순간 소멸합니다.

 

 

위 코드에서는 if문 중괄호가 열린상태에서 int형 변수 b가 생성되었습니다.

그래서 if문의 지역변수인 b가 생겼고요 그리고 나서 if문의 중괄호가 닫히면서

b는 소멸해버립니다. 그러나 그 다음줄에서 이미 사라진 b를 사용하려고 하니 에러가 나는겁니다.

 

하지만 if문에서만 중괄호를 쓰는것이 아니죠

아래 코드를 보시죠

 

이 강좌는 C언어를 기준으로 설명하겠습니다

 

#include <stdio.h>

int main()
{
    int a = 0;
    if( a == 0 )
    {
        int b = 3;
        switch(b)
        {
            case 3:
                int c = 0;
        }
    }
}

여기서 변수 a는 "메인함수의 지역변수"라고 하고

b는 "if문의 지역변수"라고 하며

c는 "switch문의 지역변수" 라고 합니다

 

물론 아래와같은 코드는 실행 가능합니다

#include <stdio.h>

int main()
{
    int a = 0;
    
    if( a == 0 )
    {
        a = 5;
    }
}

이건 왜 에러가 안날까요?

메인함수의 중괄호가 열린후 생성된 메인함수의 지역변수인 a는

if문을 작동하게 하고 if문에서 a를 5로 할당합니다

그리고 if문을 탈출 한후 메인함수의 중괄호가 닫히면서

a가 소멸하게되는거죠!

 

이렇게 설명하면 당연히 작동되겠네 싶겠죠~?

 

 

자 그럼 전역변수란 뭘까요??

 

전역변수란 지역변수랑 다르게 어디서나 쓸수있게 모든위치 즉, 전역에서 쓸수있는 변수를 말하는데요

C언어에서는 이렇게 정의할수있습니다

#include <stdio.h>

int a;

int main()
{
	a = 3;
}

이렇게하면 메인함수뿐만아니라 다른 함수를 만든다 해도 그 함수에서

전역변수를 사용할수 있답니다!

 

 

단! 대부분의 프로그래머는 이 전역변수의 사용을 금지하고있어요

 

그 이유는 메모리때문인데요

우리가 흔히 if문에서 지역변수를 만들면 그 변수를 메모리에 넣겠죠?

자 뭐 만약에 만약에 10바이트짜리 메모리가 있다고 칩시다

int형이 4바이트이니 if문의 지역변수로 변수를 생성했어요

남은 메모리는 6바이트겠죠?

그리고 if문이 끝나면 자동으로 변수가 소멸하면서 다시

사용가능한 남은 메모리는 10바이트가 되는겁니다

 

그런데 전역변수는 프로그램이 시작한 순간에 만들어져서

프로그램이 완전히 종료되는 순간에 소멸해요!

근데 만약에 int형 전역변수를 만들었다고 칩시다

그럼 사용가능한 메모리는 6바이트 남았을거고

그러면 메인함수에서는 뭘 어떻게 해도

남은 6바이트밖에 못쓰는거에요!

 

그래서 메모리를 썼다가 안쓰는건 소멸시키고 하면서

유동적으로 사용하기 위해서 전역변수는 쓰지말라고 권장하고있습니다!

그래서! 우리 블로그에서는 전역변수를 금지하는걸로 할게요~

전역변수 쓰지마세요~~

'공통' 카테고리의 다른 글

버퍼란?  (0) 2019.07.19
주석  (0) 2019.06.26
프로그래밍 표기법  (0) 2019.06.26
연산자  (0) 2019.06.24
자료형과 실수 오차  (0) 2019.06.24