본문 바로가기
3-1 학기/Programming Languages

[프로그래밍언어] Ch5 Names, Bindings, and Scopes

by bona.com 2024. 4. 14.

Variables

변수는 memory cell의 추상화이다.

다음과 같은 속성으로 특징지을 수 있다.

  • Name, Address,  Value, Type, Lifetime, Scope

1. Name

- 가독성에 도움이 된다.
- 키워드는 특정 컨텍스트에서만 특수한 단어이다.

 

2. Address

- 변수는 실행 중 다른 시간에 다른 주소를 가질 수 있다.
- 두 개의 변수 이름을 사용하여 동일한 메모리 위치에 액세스할 수 있는 경우 별칭이라고 한다.
- Aliases는 포인터, 참조 변수, C 및 C++ 결합을 통해 생성된다.
- Aliases는 가독성이 좋지 않다.(프로그램 판독기는 별칭을 모두 기억해야 함)

 

3. Value

- 변수가 연관된 위치의 내용

 

4. Type

- 변수 값의 범위와 해당 유형의 값에 대해 정의된 작업 집합을 결정한다.

(데이터 집합과 연산 집합의 결합으로 나타낸다.)

 

 

Binding

binding은 변수와 값 사이와 같은 엔티티와 속성 간의 연관성이다.

Binding time은 binding할 때 걸리는 시간을 의미한다.

  • static binding : 바인딩이 실행 시간 전에 처음 발생하고 프로그램 실행 중에 변경되지 않은 상태로 유지 (컴파일 시간에 성격이 결정됨)
  • dynamic binding : 바인딩이 실행 중에 처음 발생하거나 프로그램 실행 중에 변경될 수 있는 경우 (런타임 시간에 성격이 결정됨)
  • explicit declaration : 변수 유형을 선언하는 데 사용되는 프로그램 문
  • implicit declaration :기본값을 통해 변수 유형을 지정하는 기본 메커니즘 (런타임에 할당해줌)

 

Scope

  • 선언된 변수가 유효한(사용될 수 있는) 프로그램 내의 범위/영역
  • 변수 이름뿐 아니라 함수 등 다른 이름도 생각해야 한다

static scope(정적 범위)의 규칙

  • 선언된 이름은 선언된 블록 내에서만 유효
  • 함대부분 언어에서 표준 규칙으로 사용된다

블록 구조를 위한 상태 관리

  • 블록 시작을 만났을 때
    • 블록 내에 선언된 변수는 유효해진다
    • 선언된 변수에 대한 상태 정보를 새로 생성한다
    • local variables은 해당 단위에서 선언된 변수이다
  • 블록 내 문장을 만났을 때
    • 유효한 변수들의 상태 정보를 이용해서 문장들을 해석한다
  • 블록 끝을 만났을 때
    • 블록 내의 선언된 변수들은 더 이상 유효하지 않다
    • 블록 내의 선언된 변수들의 상태 정보를 제거한다.

=> 상태(state)를 스택(stack) 형태로 유지 관리한다

 

Referencing Environment

어떤 문장의 참조 환경은 그 문장에서 가시적인 모든 이름의 집합을 의미한다

  • static-scoped 영역 ->그 지역 영역에 선언된 변수들과 그 조상 영역에 속한 가시적인 모든 변수들로 구성
  • dynamic-scoped 영역 -> 그 지역 영역에 선언된 변수들과 현재 활성화되어 있는 모든 다른  sub-program 에서 선언된 변수들로 구성 (동일 이름 존재 시 활성화된 sub-program에 속한 어떤 변수들은 참조 환경으로부터 은폐 가능)

위의 코드를 예시로 들 수 있을 것이다.

만일, 아래에 보이는 point 1,2,3 중에 Referencing Environmnet가 같은 것을 고르라고 한다면 3번이 정답이 될 것이다.

 

Lifetime

Lifetime은 해당 변수가 메모리에 존재하고 유효한 기간을 의미한다.

 

  • Local Variables(지역변수): 특정 함수나 블록 내에서 선언되며, 해당 함수나 블록이 실행되는 동안에만 존재한다.
  • Global Variables(전역변수): 프로그램의 어디에서나 접근할 수 있으며, 프로그램이 시작될 때부터 종료될 때까지 메모리에 남아있다.
  • Static Variables (정적변수): 함수나 블록 내에 선언될 수 있지만 프로그램이 시작될 떄 메모리에 할당되고 프로그램 실행이 종료될 때까지 메모리에 남아있다. 특히 정적변수는 블록이 실행될 때마다 초기화되지 않고 이전 값들을 유지한다. 
  • Dynamic Variables(동적변수): 프로그램 실행 중 동적 메모리 할당을 사용하여 생성된다. 동적 변수의 Lifetime은 개발자에 의해 관리되어야 하며, 더 이상 필요하지 않을 때는 메모리 할당 해제 함수를 사용해서 수동으로 메모리를 해제해야 한다.