소년코딩

01.07 - 지역 범위 (local scope)

이전 포스트에서 CPU가 int x; 와 같은 명령문을 실행하면 변수가 인스턴스화 한다는 것을 배웠다.

변수의 범위(scope)는 인스턴스화되어 있는 동안 변수를 보고 사용할 수 있는 시점을 결정한다. 함수 본문 내에 정의된 함수 매개 변수변수는 모두 지역 범위(local scope)를 가진다.

즉, 해당 변수는 변수를 정의하는 함수 안에서만 보고 사용할 수 있다. 지역 변수는 정의 지점에서 생성되고 범위를 벗어나면 파괴된다. (보통 함수의 끝 부분이다.)

예제 1
#include <iostream>

int main()
{
    int x;   // 변수 x는 여기서 생성된다.
    std::cout << "Enter a value for x: ";
    std::cin >> x;
    std::cout << "You entered: " << x << std::endl;

    return 0;
} // 변수 x는 여기서 삭제된다.
예제 2
#include <iostream>

int add(int x, int y) // 매개 변수 x와 y는 여기서 생성된다.
{
    // 변수 x와 y는 이 함수(add) 안에서만 보고 사용 가능하다.
    return x + y;
} // 변수 x와 y는 범위를 벗어났기 때문에 여기서 파괴된다.

int main()
{
    int a = 5; // 변수 a는 여기서 생성되고 초기화된다.
    int b = 6; // 변수 b는 여기서 생성되고 초기화된다.
    // 변수 a와 b는 이 함수(main) 안에서만 사용 가능하다.
    std::cout << add(a, b) << std::endl; // x=a, y=b 와 함께 add() 함수를 호출한다.
    return 0;
} // 변수 a와 b는 범위를 벗어났기 때문에 여기서 파괴된다.

add() 함수에서 매개 변수 xy는 함수가 호출될 때 생성되며 add() 함수 안에서만 보거나 사용할 수 있고 add() 함수 끝에서 파괴된다. 변수 abmain() 함수 내부에서 생성되고 main() 함수 안에서만 보거나 사용할 수 있고 main() 함수 끝에서 파괴된다.

이해를 돕기 위해 위 프로그램을 좀 더 자세하게 살펴보자.

  1. main() 함수가 실행된다.
  2. main() 함수의 변수 a가 생성되고 값 5가 할당된다.
  3. main() 함수의 변수 b가 생성되고 값 6이 할당된다.
  4. add() 함수가 인수 5, 6과 함께 호출된다.
  5. add() 함수의 변수 x가 생성되고 값 5가 할당된다.
  6. add() 함수의 변수 y가 생성되고 값 6이 할당된다.
  7. add() 함수에서 연산자 +에 의한 값 11을 return 문에 의해 호출자(main() 함수)에게 반환한다.
  8. add() 함수의 변수 x와 y가 파괴된다.
  9. main() 함수에서 11을 콘솔창에 출력한다.
  10. main() 함수에서 운영체제에 0을 반환한다.
  11. main() 함수의 변수 a와 b가 파괴된다.

만약 add() 함수를 두 번 호출하면 add() 함수의 매개 변수 xy가 두 번 생성되고, 각 호출에 대해 한 번씩 삭제된다. 함수와 함수 호출이 많은 프로그램에서는 변수가 자주 생성되고 파괴된다.

위 예제에서, 변수 ab는 변수 x, y와 다르다.

#include <iostream>

int add(int x, int y) // add() 함수의 변수 x와 y는 여기서 생성된다.
{
    return x + y;
} // add() 함수의 변수 x와 y는 범위를 벗어났기 때문에 여기서 파괴된다.

int main()
{
    int x = 5; // main() 함수의 변수 x는 여기서 생성된다.
    int y = 6; // main() 함수의 변수 y는 여기서 생성된다.

    // main() 함수의 변수 x, y의 값은 add() 함수의 변수 x, y 로 복사된다.
    std::cout << add(x, y) << std::endl; 

    return 0;
} // main() 함수의 변수 x와 y는 범위를 벗어났기 때문에 여기서 파괴된다.

main() 함수와 add() 함수 모두 변수 x, y를 가지고 있지만, 이름만 같을 뿐 관련이 없다.

main() 함수 안에서 xy 이름은 지역적으로 범위가 지정된 변수 xy를 참조한다. 이러한 변수는 main() 함수 내부에서만 볼 수 있다. 비슷하게 add () 함수 내부에서, xy 이름은 매개 변수 xy를 참조하고 add () 내부에서만 볼 수 있다.

간단히 말해서, add()main () 함수는 다른 함수가 같은 이름의 변수를 가지고 있다는 것을 알지 못한다.


cpp 번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/1-4d-a-first-look-at-local-scope/ 입니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기