01.07 - 지역 범위 (local scope)
이전 포스트에서 CPU가 int x;
와 같은 명령문을 실행하면 변수가 인스턴스화 한다는 것을 배웠다.
변수의 범위(scope)는 인스턴스화되어 있는 동안 변수를 보고 사용할 수 있는 시점을 결정한다. 함수 본문 내에 정의된 함수 매개 변수와 변수는 모두 지역 범위(local scope)를 가진다.
즉, 해당 변수는 변수를 정의하는 함수 안에서만 보고 사용할 수 있다. 지역 변수는 정의 지점에서 생성되고 범위를 벗어나면 파괴된다. (보통 함수의 끝 부분이다.)
예제 1
#include <iostream>
int main()
{
int x;
std::cout << "Enter a value for x: ";
std::cin >> x;
std::cout << "You entered: " << x << std::endl;
return 0;
}
예제 2
#include <iostream>
int add(int x, int y)
{
return x + y;
}
int main()
{
int a = 5;
int b = 6;
std::cout << add(a, b) << std::endl;
return 0;
}
add()
함수에서 매개 변수 x
와 y
는 함수가 호출될 때 생성되며 add()
함수 안에서만 보거나 사용할 수 있고 add()
함수 끝에서 파괴된다. 변수 a
와 b
는 main()
함수 내부에서 생성되고 main()
함수 안에서만 보거나 사용할 수 있고 main()
함수 끝에서 파괴된다.
이해를 돕기 위해 위 프로그램을 좀 더 자세하게 살펴보자.
- main() 함수가 실행된다.
- main() 함수의 변수 a가 생성되고 값 5가 할당된다.
- main() 함수의 변수 b가 생성되고 값 6이 할당된다.
- add() 함수가 인수 5, 6과 함께 호출된다.
- add() 함수의 변수 x가 생성되고 값 5가 할당된다.
- add() 함수의 변수 y가 생성되고 값 6이 할당된다.
- add() 함수에서 연산자 +에 의한 값 11을 return 문에 의해 호출자(main() 함수)에게 반환한다.
- add() 함수의 변수 x와 y가 파괴된다.
- main() 함수에서 11을 콘솔창에 출력한다.
- main() 함수에서 운영체제에 0을 반환한다.
- main() 함수의 변수 a와 b가 파괴된다.
만약 add()
함수를 두 번 호출하면 add()
함수의 매개 변수 x
와 y
가 두 번 생성되고, 각 호출에 대해 한 번씩 삭제된다. 함수와 함수 호출이 많은 프로그램에서는 변수가 자주 생성되고 파괴된다.
위 예제에서, 변수 a
와 b
는 변수 x
, y
와 다르다.
#include <iostream>
int add(int x, int y)
{
return x + y;
}
int main()
{
int x = 5;
int y = 6;
std::cout << add(x, y) << std::endl;
return 0;
}
main()
함수와 add()
함수 모두 변수 x
, y
를 가지고 있지만, 이름만 같을 뿐 관련이 없다.
main()
함수 안에서 x
와 y
이름은 지역적으로 범위가 지정된 변수 x
와 y
를 참조한다. 이러한 변수는 main()
함수 내부에서만 볼 수 있다. 비슷하게 add ()
함수 내부에서, x
와 y
이름은 매개 변수 x
와 y
를 참조하고 add ()
내부에서만 볼 수 있다.
간단히 말해서, add()
와 main ()
함수는 다른 함수가 같은 이름의 변수를 가지고 있다는 것을 알지 못한다.
번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/1-4d-a-first-look-at-local-scope/ 입니다.