Computer Science/Programming :: 프로그래밍언어론

프로그래밍언어론 강의 8화 :: 변수 영역, 정적 영역, 동적 영역, 이름 공간

HJPlumtree 2021. 10. 12. 11:18

프로그래밍언어론 8화를 듣고 배운내용

 

 

변수의 영역(scope)

변수를 사용할 수 있는 범위

변수에 값을 입력하거나, 읽어올 수 있는 범위

영역의 시작: 변수 선언

 

수명의 시작

  • 동적 바인딩 => 변수 선언
  • 정적 바인딩 => 프로그램 수행 시작

 

 

블록(Block)

영역을 구분해주는 단위

 

블록안에서 변수 선언 가능

=> 영역의 끝은 블록이 끝나는 곳

블록 표연이나 적용 기준은 언어별로 다르다

 

 

지역변수

블록 안에 선언된 변수

 

비지역변수

블록 밖에서 선언되고, 블록 안에서도 사용할 수 있는 변수

 

 

참조 환경

한 위치에서 사용할 수 이는 모든 변수의 모음

해당 위치에 모든 지역변수, 비지역변수

 

영역 규칙

정젹 영역 규칙, 동적 영역 규칙

 

 

자유변수

현재 블록에서 선언되지 않고 사용하려는 변수

비지역변수거나 오류일 수 있다.

영역 규칙에 따라 참조 위치 결정

 

 

정적 영역 규칙

블록들의 정적 내포 관계 이용

정적 내포 관계: 문맥적 포함 관계

 

용어

정적 조상: 현 블록을 문맥적으로 포함하는 모든 블록

정적 부모: 현 블록에서 가장 가까운 정적 조상

 

사용될 때

  1. 변수가 나왔을 때 현재 블록안에 선언이 되었는지 확인 => 있으면 지역변수
  2. 자유변수라면 정적 부모에 선언이 있는지 확인 => 있으면 비지역변수
    없으면 그 위의 정적 부모에 대해 반복 
  3. 제일 외곽 영역까지 선언을 찾지 못했다 => 오류

 

 

동적 영역 규칙

동적 내포 관계 이용: 서브프로그램의 호출 관계

프로그램 수행 시점에만 판단 가능

 

사용될 때

정적 영역 규칙이랑 같다

 

 

=> 대부분 정적 영역 규칙 이용한다.

 

 

이름 공간

전역변수

어떤 블록에도 포함되지 않는 곳에 선언된 변수

영역: 프로그램 전체

모든 영역에서 비지역 변수

 

 

이름 구멍

비지역 변수와 지역변수가 같은 변수 이름을 사용할 때

 

영역 구멍에서 전역변수 사용하려면

영역 연산자 이용할 수 있다.

예) C++ 영역 연산자 : : 를 이용해서 바깥 전역 변수를 사용할 수 있다.

 

 

이름 공간

관련 있는 변수와 함수를 하나로 묶어서 사용

영역 자체의 이름을 사용(JavaScript 오브젝트 같은 느낌인가?)

 

 

Blocks by Hanson Lu #unsplash