본문 바로가기
공부

전역 변수와 생존 시간

by 알고있니 2017. 3. 20.
728x90
반응형

1. 전역 변수 

  전역 변수는 함수 외부에서 선언되는 변수이다. 전역 변수는 지금까지는 사용한 적이 없을 것이다. 지역 변수의 범위가 함수나 블록으로 제한되는 반면, 전역 변수의 범위는 소스 파일 전체이다. 즉 전역 변수는 모든 함수에서 접근할 수 있고 사용이 가능한 변수이다. 다음의 프로그램에서 변 수x는 함수 외부에 선언된 전역 변수이기 때문에 sub 1, sub 2, sub 3에서 모두 사용이 가능하다. 

 

  프로그래머가 전역 변수를 초기화하지 않으면 컴파일러에 의하여 0으로 초기화된다. 그렇다면 전역 변수의 생존 기간은 어떻게 될까? 전역 변수는 프로그램 시작과 동시에 생성되어 프로그램이 종료되기 전까지 메모리에 존재한다. 따라서 프로그램 시작과 동시에 접근할 수 있으며 종료되기 전까지 전체 영역에서 접근할 수 있다. 

 

  전역 변수는 상당히 편리할 것처럼 생각되지만, 전문가들은 사용을 권하지 않는다. 그 이유는 어디서나 접근할 수 있다는 장점이 단점이 될 수 있기 때문이다. 프로그램이 복잡해지다 보면 전역 변수를 사용하여 데이터 교환을 하다 보면 함수와 함수들이 서로 얽히고설키게 된다. 따라서 하나의 함수 또는 하나의 전역 변수를 변경하려면 많은 다른 부분들도 같이 변경해야 하는 경우가 흔하게 발생한다. 따라서 전역 변수로 데이터 교환을 하기보다는 잘 정의된 인터페이스를 통하여 데이터를 교환하는 편이 낫다. 이처럼 전역 변수들로 인하여 코드가 꼬이는 현상을 스파게티 코드라고 한다. 마치 스파게티처럼 복잡하게 꼬여 있다는 의미이다.

 

  함수를 사용하게 되면 모듈화 프로그래밍이 가능하다고 말한 바 있다. 모듈화 프로그래밍은 프로그램을 특정 작업을 수행하는 독립된 모듈로 분리하는 것이다. 모듈화 프로그래밍에서 각각의 모듈들은 독립적이어야 한다. 독립적이란 의미는 모듈, 즉 함수는 자신의 작업에 필요한 데이터와 코드를 모두 포함하여야 한다는 뜻이다. 그러나 전역 변수를 사용하게 되면 모듈 밖의 데이터를 사용하는 것이므로 각 모듈의 독립성을 위반하게 된다. 따라서 모듈화 프로그래밍의 취지를 살리려면 전역 변수는 사용하지 않는 편이 좋다. 그러나 상황에 따라서는 약간의 전역 변수를 두는 편이 효율성을 위하여 좋을 수 있다. 

 

  만약 전역 변수와 이름이 같은 지역 변수를 선언하면 어떻게 될까? 만약 전역 변수와 지역 변수의 이름이 같다면 지역 변수가 전역 변수보다 우선시된다. 이것을 지역 변수가 전역 변수를 가린다고 한다. 

 

  예제를 들어 살펴보기로 하자. 예제에서는 같은 이름 sum을 가지는 전역 변수와 지역 변수가 선언되었다. main에서 sum의 값을 출력한다. 그렇다면 main에서 사용하는 sum은 전역 변수 sum일까? 아니면 지역 변수 sum일까? 전역 변수와 지역 변수가 같은 이름을 사용하고 있는 경우, 지역 변수가 전역 변수보다 우선권을 가지기 때문에 지역 변수 sum의 값이 출력된다.

728x90
반응형

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

합성 다이아몬드  (0) 2017.03.29
순환이란  (0) 2017.03.21
자료형과 변수의 이름 짓기  (0) 2017.03.20
변수와 자료형  (0) 2017.03.19
수의 표현 및 진법 변환, 명령어  (0) 2017.03.18

댓글