본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #25 - 전역변수

저번편에서는 지역변수에 대해서 알아봤습니다. 이변 편에서는 그것와 비교되는 개념인 전역변수를 알아봅시다.

전역변수는 지역변수와는 달리 모든지역에서 사용이 가능한 변수입니다.

프로그램이 실행될때 메모리공간에 할당되서 프로그램이 종료될때까지 프로그램과 운명을 함께하는 변수입니다.

13편에서도 소개된적이 있는 이 전역변수는 지역변수와는 달리 중괄호 내에서 선언하지 않고 밖에서 선언해주면 됩니다.



위와같이 중괄호 밖에서 선언해서 전역변수 a가 만들어졌습니다.

전역변수는 지역변수와는 달리 프로그램이 끝날때까지 소멸하지 않기때문에 hello를 여러번 출력했더니 a값이 증가되서 출력되는걸 볼수 있습니다. 그리고 전역변수는 특이한 성질이 하나 더 있습니다.







위와같이 전역변수에 초기값을 지정해주지 않았더니 0으로 초기화댔습니다.

전역변수는 초기화를 하지 않으면 0으로 초기화됩니다.



그리고 위 예제를 보면 전역변수는 어디에서든 접근이 가능하다는것도 알수 있습니다.



근데 만약 상위지역과 하위지역의 변수 이름이 겹치게되면 어떻게될까요?

컴파일에러가 난다고 생각할수도 있겠지만 그렇지 않습니다.



main함수의 지역을 A라고하고 4~7행에 있는 지역을 지역 B라고 해봅시다.


지역 A에서도 변수 a가 선언됐고 지역 B에서도 변수 a가 선언이되었습니다.

하지만 이런경우 컴파일 에러가 나지 않고 지역A에 있는 변수가 잠시 가려지고 지역B에 있는 변수a로 접근이 이뤄집니다.

그리고 지역 B에 있는 변수 a가 소멸됐을때 다시 지역a변수로 접근이 이뤄집니다.


그래서 지역 B에있는동안은 10이 출력되고 지역 A로 나왔을때 다시 a는 0이 됐습니다.


이것은 지역변수끼리 뿐만 아니라 전역변수와 지역변수 사이에서도 동일하게 적용됩니다.



이렇게 전역변수와 지역변수에서 동일한 이름의 변수가 선언되면 아까의 경우와 똑같은 일이 발생합니다.


하지만 이런 상황은 만들지 않는것이 좋습니다. 변수의 이름은 다르게 선언해주는것이 좋고 해당 용도에 맞는 이름으로 선언해주는것이 좋습니다.


그리고 전역변수도 가능하면 최대한 사용하지 않는것이 좋습니다.

전역변수가 꼭 필요한 상황이 오기도 하지만 사실 그런 상황이 자주 오지는 않습니다.

전역변수는 코드를 복잡하게 만드는 원인이 될수 있고 한 지역에서만 사용하는 변수를 굳이 계속해서 가지고있어봤자 메모리 낭비밖에 되지 않습니다. 지역변수로 해결 가능한 부분은 지역변수를 이용하도록 합시다.