Scope
사용 범위
- 어떤 이름(변수나 함수와 같은)이 한 File(Translation Unit) 안에서 얼마나 널리 사용가능한지를 구분지어놓은 개념이다.
Local Scope = Block Scope (지역 사용 범위, 블록 사용 범위)
- 이 영역의 이름들은 이 이름들을 정의한 블록 안에서만 사용 가능하다.
- 자동 변수가 이에 해당된다.
- 전역 사용 범위의 이름과 지역 사용 범위의 이름이 겹칠 경우, 지역 변수가 우선시 된다.
(이를 두고, "new definition hides the prior definition." ("새 정의가 이전 정의의 앞을 가린다.")라고 표현한다.)
Global Scope = File Scope (전역 사용 범위, 파일 사용 범위)
- 이 영역의 이름들은 정의된 지점부터 해당 파일의 끝까지 사용 가능하다.
* 정적 변수는 정의 방식에 따라 지역 사용 범위 혹은 전역 사용 범위에 해당될 수 있다.
Function Prototype Scope (함수 원형 사용 범위)
- 매개변수 리스트를 둘러싸고 있는 괄호 내부에 해당되는 영역이다.
Class Scope (클래스 사용 범위)
- 클래스 안에 선언된 데이터 멤버와 멤버 함수들이 해당되는 영역이다.
- 클래스 안에서는 알려지지만 클래스 밖에서는 정의되지 않는 범위이다.
(위와 같은 이유에서, 클래스 멤버들은 서로 다른 클래스에 같은 이름으로 선언할 수 있다.)
- 객체를 통하거나 \(\texttt{::}\) 연산자를 사용하지 않고서는 클래스 사용 범위를 가지는 멤버들을 클래스 밖에서 접근할 수 없다.
Namespace Scope (이름 공간 사용 범위)
- 특정 이름 공간 안에 선언된 이름들이 속한 영역이다.
* C++에서의 함수는 전역 사용 범위를 포함하여, 클래스 사용 범위와 이름 공간 사용 범위를 가질 수 있으나 지역 사용 범위는 가질 수 없다.
- 함수가 지역 사용 범위내에 위치하게 되면, 다른 함수가 해당 함수를 호출할 수 없게 되므로 함수를 정의하는 의미가 사라지는 꼴이 되기 때문이다.