Scope , Variable Scope   스코프 , 변수 스코프, 변수 영역

(2024-09-30)

Lifetime , 변수 수명, Global Variable, 전역 변수, Local Variable, 지역 변수, 정적 스코프, 렉시컬 스코프, 동적 스코프


1. 변수를 특징짓는 주요 속성들은,변수 고유 속성들
     - 이름 (식별자), 주소 (기억공간 위치), 타입 (타입에 따라 연산도 달라짐), 값 (Value)

  ㅇ 변수가 수행되는 위치,시간에 의존적인 속성들                    ☞ C 언어 기억클래스 참조
     - 유효 범위(스코프,Scope), 유효 기간(수명,Lifetime), 프로그램 환경(Program Environment)


2. 유효 범위 : 스코프 / 영역 / 범위 (Scope)

  ㅇ 스코프 (가시성, Visibility) 이란?
     - 프로그램변수에 접근할 수 있는 유효 범위/영역 
        . 정의된 변수가 보이는 유효 범위
        . 통상, 변수 선언 이후부터, 그 선언문이 속한 블록이 끝나는 부분까지 임

  ㅇ (위치에 따라 달라지는)  스코프 구분
     - 전역 변수 (Global Variable) 또는 전역 스코프 (Global Scope)
        . 블록(함수 등) 밖 전역 스코프에서 선언/정의/사용되는 변수
           .. 프로그램 전체 어느 곳에서도 사용 가능
           .. 블록(함수 등) 안과 밖 모두에서 사용가능한 변수

        . [C 언어] 함수 밖에서 선언됨. 선언된 위치 아래 만 사용 가능. 프로그램 종료시까지 만 유효

     - 지역 변수 (Local Variable) 또는 지역 스코프 (Local Scope) 또는 블록 스코프 (Block Scope)
        . 블록(함수 등) 안 지역 스코프에서 선언/정의/사용되는 변수
           .. 즉, 블록(함수 등) 내에서 만 선언되고 사용되는 변수
        . 한편, 함수매개변수도, 지역 변수 범주에 속하므로, 
           .. 함수 내 만 접근 가능

        . [C 언어] 중괄호 내부 블록에서 선언됨. 블록 안으로 진입시 자동 생성, 벗어나면 소멸됨
           .. 과거 C 언어에서, 지역 변수선언 위치를, 블록 맨 처음에 위치해야 만 했으나,
           .. 최근 컴파일러에서는 자동으로 알아서 처리하여, 그런 제한이 없어짐  ☞ 호이스팅 참조

     * 만일, 전역 변수 및 지역 변수의 명칭이 충돌하면, 지역 변수가 우선이 됨

  ㅇ (시간에 따라 달라지는)  스코프 구분
     - 정적 스코프 (정적 메모리 할당)
        . 컴파일러 번역 시에, 변수 영역이 결정됨
        . 어휘적 범위(Lexical Scope, 렉시컬 스코프) 라고도 함
        . 함수를 정의할 때, 구문 해석 만으로도,
           .. 어떤 변수가 그 함수 스코프에 있는지를 알 수 있음
        . 즉, 코드 작성 시점에 스코프가 결정됨

     - 동적 스코프 (동적 메모리 할당)
        . 실행시에 만 비로소 변수 영역이 결정점
        . 함수를 실행할 때 만, 비로소 어떤 변수가 그 함수 스코프에 있는지 알 수 있게됨


3. 유효 기간 : 수명 (Lifetime)변수 수명
     - 변수가 기억장소에 할당된 시점부터 반환되는 시점까지의 시간변수 수명에 따른 구분
     - 자동 변수(Automatic Variable)
        . 프로그램 제어가 블록(함수 등) 내에 진입할 때 기억장소 할당이 되고,
        . 빠져나갈 때 기억장소 해제가 일어남
     - 정적 변수(Static Variable)
        . 한 번 할당되면 프로그램 종료시까지 회수되지 않고 기억장소에서 살아있는 변수


4. 변수의 스코프(Scope) 및 수명(Lifetime)은, 서로 불가분의 관계를 갖음

  ㅇ 통상, 블록 구조에서는, 
     - 그 시작점에서 지역 변수가 기억장소에 할당되고, 끝점에서 회수됨
     - 이 경우에, 지역 변수의 스코프와 수명은 일치하게 됨

  ㅇ 그러나, 지역 변수정적 변수선언되는 경우(`static 변수명` 처럼)에는,
     - 스코프와 수명은 불일치 함                                  ☞ C 언어 기억 클래스 참조

  ㅇ 한편, 전역 변수정적 변수는, 수명은 같지만 스코프는 다름
     - 전역 변수정적 변수프로그램 실행 동안 유지된다는 점에서는,
        . 수명은 같지만, 스코프는 다음과 같이 서로 다름
     - 즉, 
        . 전역 변수의 스코프는, 프로그램 어느 부분에서든 참조 가능하지만,
        . 정적 변수의 스코프는, 선언된 블록(함수 등) 내에서 만 참조 가능

변수
   1. 변수   2. 변수 종류   3. 이름   4. 바인딩   5. 선언/정의/초기화   6. Scope,Lifetime   7. 참조 환경   8. 블록 구조   9. 좌변값  


"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"