ISSAC.Min

[C++ Basic]지역변수(Local Variable) / 전역변수(Global Variable) 본문

Programming Language/C++ Basic

[C++ Basic]지역변수(Local Variable) / 전역변수(Global Variable)

ISSAC.M 2019. 4. 16. 13:04
반응형

 1. 지역변수(Local Variable)


예전 포스팅에서 변수(Variable)에 관한 이야기를 짧게나마 하고 지나간적이 있다. 이러한 변수(Variable)는 정의된 장소에 따라 사용 범위를 가지게 되는데 지금 설명할 지역변수(Local Variable)과 다음에 설명할 전역변수(Global Variable)로 나뉘게 된다. 일반적으로 변수의 사용에 있어 유효범위는 매우 중요한데 대표적으로 모든 부분에서 공통적으로 사용해야하는 경우도 발생하며 어떤 함수 속에서만 사용해야하는 변수도 발생하는 것이 그 예이다.


일반적으로 대부분의 변수는 생성되고 사용되며 마지막엔 소멸한다. 그리고 이러한 변수들은 어디서 생성되어 어디에 저장되며 어디서 사용하고 언제 소멸되는지는 변수마다 다르다.


이제 설명할 지역변수(Local Variable)함수 내부에서 생성되어 스택(Stack)에 저장되며 선언된 함수 내부에서 사용되고 함수가 종료되면 소멸한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
void ex_func();
 
int num1 = 100;            // 1번
 
int main(){
    int num2 = 200;         // 2번
    cout << num1 << endl;
    cout << num2 << endl;
    ex_func();
    return 0;
}
 
void ex_func(){
    int num3 = 300;         // 3번
    cout << num3 << endl;
    cout << num1 << endl;
}
cs


위의 예시를 보면 main과 ex_func는 함수로 보며 위의 프로그램의 출력은

100

200

300

100

이다. 그러면 지역변수(Locla Variable)는 1번 ~ 3번에서 몇번일까?


정답은 2번3번이다.


그러면 각 번호에 대한 설명을 붙이자면 1번 num1은 어느 함수에도 포함되지 않고 함수들의 외부에 선언되어있다. 그런데 main함수와 ex_func함수에서도 num1는 사용가능하다. 이때 이것을 전역변수라고 칭하고 다음 장에서 설명할 것이다.


2번을 보면 1번과 다르게 main 함수 내부에서 선언되어있다. 그리고 이 변수는 다른 함수에서 사용할 수 없다. 즉 아래와 같은 경우는 error가 발생한다.(21줄 참고)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
void ex_func();
 
int num1 = 100;       
 
int main(){
    int num2 = 200;   
    cout << num1 << endl;
    cout << num2 << endl;
    ex_func();
    return 0;
}
 
void ex_func(){
    int num3 = 300;        
    cout << num3 << endl;
    cout << num1 << endl;
    cout << num2 << endl;    // error가 나는 부분
}
cs


즉, num2는 ex_func함수 안에서만 유효범위를 가지기 때문에 ex_func 함수내부에서 선언되지 않은 num2는 사용할 수가 없는 것이다. 이것은 num3도 동일하다. 또한 변수들의 소멸을 살펴보자면 위의 예시에서 num3는 ex_func 함수의 지역변수이기 때문에 만약 아래와 같다고해서 num3값이 출력되지 않는다. num3는 ex_func 함수가 벌써 종료되었기 때문이다.


int main(){
    int num2 = 200;   
    cout << num1 << endl;
    cout << num2 << endl;
    ex_func();
    cout << num3 << endl;
    return 0;
}


또한 아래와 같이 ex_func 함수에서 선언되어있는 num3는 main내부에서 사용할 수도 없다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
void ex_func();
 
int num1 = 100;       
 
int main(){
    int num2 = 200;   
    cout << num1 << endl;
    cout << num2 << endl;
    cout << num3 << endl;    // error가 나는 부분
    ex_func();
    return 0;
}
 
void ex_func(){
    int num3 = 300;        
    cout << num3 << endl;
    cout << num1 << endl;
}
cs


그리고 앞에서 지역변수는 스택(Stack)이라는 곳에 저장된다고 하였다. 자료구조를 배웠다면 쉽게 이해할 수 있겠지만 C++ Basic에서는 그냥 간단히 말해서 위에서부터 차곡차곡 쌓이고 마지막에 들어왔던 것이 먼저 나가는 구조의 임시 메모리이며 생성과 소멸의 반복이라고 생각하면 되겠다. 스택에 관해서는 나중에 포스팅으로 자세히 설명하도록 하겠다.



 2. 전역변수(Global Variable)


앞에서 말한 지역변수(Local Variable)도 매우 중요하지만 전역변수(Global Variable)도 중요도의 비중이 크다. 또한 사용할 수 있는 유효범위가 둘의 가장 큰 차이이긴 하지만 이로 인해서 딸려오는 다른 차이점들도 많이 존재한다.


앞에서 

지역변수(Local Variable)는 함수 내부에서 생성되어 스택(Stack)에 저장되며 선언된 함수 내부에서 사용되고 함수가 종료되면 소멸한다.

한다 라고 소개했었는데


전역변수(Global Variable)프로그램이 시작 될때 생성되어 데이터(Data)에 저장되며 프로그램 전체에서 사용 가능하며 프로그램이 종료되면 소멸한다.


앞에서 보았던 예시를 보면


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
void ex_func();
 
int num1 = 100;             // 1번
 
int main(){
    int num2 = 200;         // 2번
    cout << num1 << endl;
    cout << num2 << endl;
    ex_func();
    return 0;
}
 
void ex_func(){
    int num3 = 300;         // 3번
    cout << num3 << endl;
}
cs


1번을 전역변수(Global Variable)이라고 소개한적이 있다. 또한 전역변수인 num1은 지역변수 num2, num3와 다르게 밖에서 선언되어있지만 main 함수에서도 사용가능하다.(11번라인), 물론 이 num1은 ex_func() 함수에서도 사용가능하다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
void ex_func();
 
int num1 = 100;             // 1번
 
int main(){
    int num2 = 200;         // 2번
    cout << num2 << endl;
    ex_func();
    return 0;
}
 
void ex_func(){
    int num3 = 300;         // 3번
    cout << num1 << endl;
    cout << num3 << endl;
}
cs


<참고>

C++ Basic에서 지역변수와 전역변수에 대한 설명은 단어를 처음 접해본 분들과 코딩을 처음 접해본 사람들을 위하여 전문적인 내용과 세부적인 내용을 모두 생략하였다.


 3. 실습


반응형