학습개요
앞서 우리는 변수의 수명에 대해 배웠습니다. 그럼 수명이 있는 동안에는 무조건 변수를 사용할 수 있을까요? 안타깝게도 대부분의 프로그래밍 언어에서는 그렇지 않습니다. 이번 강의에서는 프로그램에서 변수를 사용할 수 있는 범위인 변수의 영역에 대해 알아봅니다. 우선 변수의 영역 및 이와 관련된 기본 개념을 알아본 후, 두 가지 영역 규칙인 정적 영역 규칙과 동적 영역 규칙에 대해 알아봅니다. 그리고 이름 충돌을 해결할 수 있는 이름 공간에 대해 알아봅니다.
학습목표
- 변수의 영역의 개념을 설명할 수 있다.
- 블록의 개념을 이해하고 블록과 변수의 관계를 설명할 수 있다.
- 정적 영역 규칙과 동적 영역 규칙의 개념과 차이점을 설명할 수 있다.
- 이름 공간의 개념을 설명할 수 있다.
정리하기
- 변수의 영역이란 프로그램에서 변수를 사용할 수 있는 범위를 의미한다.
- 블록은 영역을 구분해 주는 단위로, 프로그램 문장들의 묶음이면서 그 안에서 변수 선언이 가능하다.
- 지역변수는 블록 안에서 선언된 변수이고, 비지역변수는 블록 밖에서 선언되었지만 블록 안에서 사용될 수 있는 변수이다.
- 참조 환경은 한 위치에서 사용할 수 있는 모든 변수의 모음으로, 해당위치의 모든 지역변수와 모든 비지역변수로 구성된다.
- 영역 규칙은 변수의 참조 위치를 결정하는 방법이다. 특히 현재 블록에서 선언되지 않은 자유변수에 대해 어디에서 선언된 비지역변수인지 혹은 오류인지 확인한다.
- 정적 영역 규칙은 블록들의 정적 내포 관계를 이용하여 변수의 참조 위치를 찾는 방법으로, 컴파일 시점에 결정할 수 있다. 동적 영역 규칙은 블록들의 동적 내포 관계를 이용하며, 수행 시점에 결정할 수 있다.
- 영역 구멍은 비지역변수가 같은 이름의 지역변수 때문에 보이지 않는 영역을 의미한다.
- 정적 영역 규칙은 동적 영역 규칙에 비해 안정적이고 수행 속도가 빨라서 대부분의 언어에서 사용한다.
- 전역변수는 어떤 블록에도 포함되지 않는 곳에서 선언된 변수로 영역은 프로그램 전체가 된다.
- 이름 공간은 관련성이 높은 변수와 함수를 하나의 묶음으로 관리하는 영역으로, 변수명처럼 영역 자체의 이름을 갖는다. C++는 이름 공간을 지원한다.