본문 바로가기

IT 정보

[C 언어] 변수의 사용 영역

* 본포스팅은 <김변수와 시작하는 코딩생활 with C언어>에서 발췌한 내용으로 작성되었습니다.

 

 

 

✔ 변수의 사용 영역

매개변수는 함수에서 정의한 변수의 한 종류로, 매개변수는 정의한 함수 내부에서만 사용할 수 있습니다. 이번 포스팅에서는 변수가 사용되는 ‘범위’에 대해 알아보겠습니다. 이해를 돕기 위해 먼저 글로벌 아이돌 김변수, 일반인 김변수 씨를 예시로 들어 설명하겠습니다. 전 세계를 오가며 활발히 활동하고 있는 글로벌 아이돌 김변수는 전 세계 사람들이 아는 톱스타입니다. 한국의 서울에 사는 김변수 씨는 funcA라는 회사를 다니는 회사원이며, 미국에 사는 김변수 씨는 funcB 대학교를 다니는 대학생입니다

 

 

글로벌 아이돌 변수에 대한 정보는 한국과 미국 사람들 모두 알고 있지만, 회사원과 대학생 김변수 씨에 대한 정보는 각각의 김변수 씨와 같은 나라 사람들밖에 알지 못합니다. 만약 미국의 funcB 대학교 사람들에게 김변수에 대해 물어본다면 대학생 김변수와 아이돌 변수에 대해 말할 수 있을 것입니다. 반면에 서울에 있는 funcA 회사에 다니는 사람에게 김변수에 대해 물어본다면 아이돌 변수와 회사원 김변수에 대해서는 알지만, 미국에 사는 대학생 김변수에 대해서는 알지 못할것입니다. 즉 위 그림에서 아이돌 변수는 모두가 아는 ‘전역변수(Global Variable)’로 볼 수 있고, 한국과 미국에 사는 김변수는 각각의 나라에서만 아는 ‘지역변수(Local Variable)’로 볼 수 있습니다. 이를 구현한 코드를 살펴보겠습니다.

 

 

3번 줄: 전역변수 idolByunsoo를 정의하고, 100이라는 정수형 데이터로 초기화합니다.
 5, 6번 줄: seoul과 america 함수를 선언합니다.
 9, 10번 줄: seoul과 america 함수를 호출하여 실행합니다.
16번 줄: seoul이라는 함수에서 kimByunsoo라는 변수를 정의합니다. 이 변수는 seoul 내에서만 유효합니다.
24번 줄: america라는 함수에서 kimByunsoo라는 변수를 정의합니다. 이 변수는 america 내에서만 유효합니다.


[코드 5-3-1]에서 kimByunsoo라는 변수는 16, 24번 줄에 두 번 정의되었지만, 각각 다른 값을 출력하고 있습니다. 반면 idolByunsoo라는 이름을 가진 변수는 함수 바깥에서 선언되어 모든 함수에서 같은 값을 출력하고 있습니다. 이와 같이 함수 내에서만 유효한 변수를 지역변수, 코드 내에서 모두 사용가능한 변수를 전역변수라고 합니다. 지역변수의 유효 범위에 대해 더 상세하게 알아보겠습니다.

 

 

3번 줄: main 함수 아래에서 정의한 showValue 함수를 선언합니다.
6번 줄: main 함수 내부에서 사용할 정수형 변수 x를 선언하고 x에 1을 초기화합니다.
8번 줄: main 함수 내부에 저장된 x 값을 출력합니다.
9번 줄: showValue 함수를 호출합니다.
10번 줄: main 함수 내부에 저장된 x 값을 출력합니다. showValue 함수 내부에서 x 안에 7을 저장했음에도 main 함수 내
부의 x 값은 1을 유지하고 있습니다.
15번 줄: showValue라는 이름을 가진 void 함수를 정의합니다.
16번 줄: showValue 함수 내부에서만 사용할 수 있는 int x를 선언하고 7이라는 값을 할당합니다.
18번 줄: main 함수 내 변수와 같은 이름을 가진 변수 x가 있습니다. 하지만 여기서 x는 showValue 함수 안에서 정의한 새
로운 변수입니다.


showValue 함수 안에서 선언한 int x와 main 함수에서 선언한 int x는 같은 이름을 가졌지만 다른 변수입니다. 예를 들어, 다음 그림을 보면서 생각해 보면 쉽게 이해할 수 있습니다.

 

 

위 그림의 두 사람은 모두 ‘변수’라는 이름을 가졌지만 태어난 곳도 가족도 성도 다릅니다. 이처럼 같은 이름을 가진 변수라고 하더라도 다른 함수에서 선언되었다면 서로 다른 변수입니다. 즉, 어떤 함수의 중괄호 안에서만 사용할 수 있는 변수를 지역변수라고 합니다. 지역변수와 반대로 괄호 안에서 사용되지 않고 코드 내의 모든 곳에서 사용할 수 있는 변수를 전역변수라고 합니다. 전역변수는 괄호 밖에서 선언하여 사용할 수 있습니다. 예시를 살펴보겠습니다.

 

 

3번 줄: main 함수 아래에서 정의한 showValue 함수를 선언합니다.
4번 줄: 정수형 전역변수 globalVariable을 선언하고 10을 저장합니다.
7번 줄: 전역변수 globalVariable을 출력합니다. main 함수 내부에 변수를 선언하지 않았음에도 사용할 수 있습니다.
8번 줄: showValue 함수를 호출합니다.
13번 줄: showValue라는 이름을 가진 void 함수를 정의합니다.
14번 줄: 전역변수 globalVariable를 출력합니다. main 함수와 같이 변수를 선언하지 않았음에도 같은 값을 출력합니다.


전역변수는 위처럼 괄호 밖에 선언하는 과정을 통해 편리하게 사용할 수 있습니다. 하지만 전역변수를 사용하는 일은 가능한 한 피해야 합니다. 큰 프로그램을 작성하면 어떤 함수가 전역변수의 값을 변경하는지 알기 어렵습니다. 따라서 전역변수를 쓰면 나중에 버그가 발생할 때 그 원인을 찾기 어려워집니다. 또한 지역변수와 전역변수의 이름이 겹칠 가능성이 있기 때문에 우리가 의도하지 않은 결과가 나올수 있습니다. 전역변수는 편리하게 사용할 수 있지만 꼭 필요한 경우가 아니라면 사용하지 않는 것을 권장합니다.

 

 


 

 

 

 

《김변수와 시작하는 코딩생활 with C언어》

예스24 / 교보문고 / 알라딘

 

 

반응형