WIPIVERSE

변수 영역

변수 영역(變數領域, variable scope)은 컴퓨터 프로그래밍에서 변수가 유효성을 갖는 범위를 가리킨다. 프로그램은 영역을 벗어난 변수를 가리킬 수 없으며, 변수에 값을 대입하거나 값을 읽어올 수 있는 범위도 이 영역에 의해 결정된다. 변수의 영역은 변수가 선언된 위치에서 시작된다.

변수 영역을 지정하는 규칙은 크게 정적 영역 규칙(static scoping rule)과 동적 영역 규칙(dynamic scoping rule)으로 나뉜다. 정적 영역 규칙은 변수의 유효 영역이 소스 코드의 구조를 바탕으로 컴파일 타임에 결정되며, 문법적 영역 규칙(lexical scoping rule)이라고도 한다. 대부분의 현대 프로그래밍 언어는 정적 영역 규칙을 따른다. 반면 동적 영역 규칙은 실행 시간(runtime)에 호출 스택을 기반으로 변수의 유효 영역이 결정된다. 동적 영역 규칙을 사용하는 언어로는 펄(Perl), 커먼 리스프(Common Lisp) 등이 있다.

변수 영역의 종류는 다음과 같이 구분된다.

전역 영역(global scope): 소스 코드 상의 모든 곳에서 사용할 수 있는 전역 변수에 해당한다. 다만 많은 언어에서 전역 변수는 부작용을 초래할 수 있어 나쁜 관습으로 취급되기도 한다. 이름공간(namespace)을 사용하면 전역 영역에서 변수나 함수명의 충돌을 막을 수 있다.

모듈 영역(module scope): 모듈라(Modula)나 파이썬(Python)과 같이 모듈을 지원하는 프로그래밍 언어에서는 모듈 단위 변수를 선언할 수 있다. 이 변수들은 같은 모듈 안에서만 접근할 수 있다.

파일 영역(file scope): C와 C++ 및 그 유사 언어에서 지원하는 개념이다. 소스 파일의 최상위에서 선언된 변수나 함수는 해당 파일 전체에서 접근할 수 있고, 다른 파일에서는 접근할 수 없다. 보다 원시적인 형태의 모듈 영역으로 여겨진다.

함수 영역(function scope): 대부분의 프로그래밍 언어는 함수 내에서만 유효한 지역 변수(local variable)를 제공한다. 함수 영역을 사용하는 지역 변수는 함수가 반환되면 더 이상 사용할 수 없다. 정적 영역 규칙에서는 함수가 다른 함수를 호출할 경우 변수는 영역 밖으로 벗어나게 된다.

블록 영역(block scope): 알골(ALGOL)과 그의 자손인 C, 그리고 그에 영향을 받은 많은 현대 언어들은 블록 단위 지역 변수를 지원한다. 블록 영역 변수는 루프나 조건문에서 유용하게 사용할 수 있으며, 변수 영역을 제한하기 위한 용도로 블록을 따로 선언하는 것도 가능하다.

표현식 영역(expression scope): 대부분의 함수형 프로그래밍 언어는 let 문을 지원하여 표현식 내에서만 유효한 변수를 선언할 수 있다.

함수를 값으로 반환할 수 있는 함수형 프로그래밍 언어의 경우 정적 영역 규칙은 더욱 복잡해지는데, 함수를 선언할 당시 자신의 바깥 영역에 있는 변수를 사용할 수 있기 때문이다. 이때 내부에 중첩된 함수는 함수 코드와 함수 선언 시의 변수 환경을 같이 갖고 있게 되며, 이러한 자료구조를 클로저(closure)라고 부른다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기