전역 변수 개념
전역 변수(global variable)는 함수 외부에서 선언된 변수 또는 블록( 중괄호) 밖에서 선언된 변수입니다. 지역 변수와 자주 대비되는 개념입니다.
지역 변수는 함수가 호출될 때에 메모리에 공간이 할당되고 함수 값을 반환 할 때 그 공간이 소멸됩니다.
반면에 전역 변수는 프로그램 실행될 때 메모리에 공간이 할당된 후에 프로그램이 종료되면 메모리에서 사라집니다.
전역 변수의 선언
전역 변수는 프로그램 내부라면 어디에서 든 접근이 가능하기 때문에 “전역” 변수라고 부릅니다. 아래 예제를 봅시다.
위 예제의 실행 결과는 아래와 같습니다.
num : 0
num : 3
num : 4
3행 : Add 함수를 선언 했습니다
5행 : 전역 변수 num 을 선언 했습니다.
7행 : main 함수가 시작 됩니다.
17행 : Add 함수가 정의 되어 있습니다.
5행의 num은 함수 외부에서 선언된 변수이므로 전역 변수입니다. 이 변수는 다음과 같은 특징을 갖고 있습니다.
- 별도의 초기화를 하지 않으면 초기 값이 자동으로 0 이 됩니다.
- 프로그램의 어디에서 든 접근이 가능합니다.
- 프로그램 시작부터 종료할 때 까지 메모리에 존재합니다.
5행에서 변수 선언만 하고 초기화를 하지 않았지만 9행의 출력 결과를 보면 num 이 0 이므로 0 으로 초기화 됨을 알 수 있습니다.
num 은 전역 변수이므로 12행, 19행 등 프로그램 내부 어디에서 든 접근이 가능한 것을 알 수 있습니다.
지역 변수와 이름이 동일할 경우
전역변수와 지역변수의 변수 이름이 동일하다면 누가 더 우선 순위를 갖는가?
아래 예제를 봅시다.
위 예제의 실행 결과는 아래와 같습니다.
num : 12
num : 14
5행 : 전역 변수 num 선언 되었습니다.
9행 : 지역 변수 num 이 선언 되었습니다.
위 예제의 실행 결과에서 알 수 있듯이 11행의 num 은 전역 변수인 5행의 num 이 아닙니다. 9행의 지역 변수 num 을 의미하는 것입니다.
따라서 결과 값도 10이 아니라 14가 나오게 됩니다.
위 예제와 같은 동일한 변수 이름 만들기는 좋지 못한 것입니다.
가급적 변수의 이름은 서로 다른 것이 쓸 데 없는 혼동을 만들지 않습니다.
따라서, 전역 변수와 지역 변수의 이름도 서로 구별되게 지어야 합니다.
전역 변수 남용 금지
전역 변수가 자주 쓰이면 그 만큼 프로그램이 복잡해지고 혼란을 야기합니다.
예컨대 전역 변수의 이름이 변경 되었다면 그 변수에 접근하여 이용 중인 모든 함수들은 모두 변경된 전역 변수의 이름으로 바꾸어 주어야 합니다.
따라서 , 사용 범위가 정확하고 제어가 쉬운 지역 변수를 우선 사용하는 것이 좋습니다.