2. 변수의 속성
• 변수의 6가지 속성
• 이름 (Name)
• 타입 (Type)
• 주소 (Address)
• 값 (Value)
• 영역 (Scope)
• 존속기간 (Lifetime)
• 변수의 값
• 변수의 l-value : 변수의 주소
• 변수의 r-value : 변수의 값
• Call-by-value는 r-value를
Call-by-Reference는 l-value를
전달한다.
• 영역과 존속기간
• 영역 : 변수 선언문부터 부프로그램의
끝 부분까지
• 존속기간 : 부프로그램이 호출되어 실
행을 시작한 시점부터 부프로그램의
실행이 종료되어 return 할 때까지
3. 변수의 바인딩
정적 바인딩
• 최초의 바인딩이 프로그램 실행하기 전에 이루어진다.
• 한번 바인딩이 이루어진 속성은
프로그램이 종료될 때까지 변하지 않는다.
• 시기별 정적바인딩
• 프로그래밍언어를 설계할 때
• 연산자 기호
• 프로그래밍언어를 구현할 때
(compile/interpreter를 작성할 때)
• 정수형 값의 범위
• 실수형의 표현
• 프로그램을 Compile할 때
• 변수의 타입
• 프로그램을 메모리에 : Load할 때
• 전역변수의 주소
• static 변수의 주소
동적바인딩
• 최초의 바인딩이 프로그램 실행하는 동안 이루어진다.
• 한번 바인딩이 이루어진 속성이 프로그램 실행 과정에서
다시 발생하는 바인딩에 의해서 다른 속성으로 변할 수 있다.
• 시기별 동적바인딩
• 프로그램을 실행할 때
• static이 아닌 지역변수의 주소
• 부프로그램의 인자의 주소
• 동적으로 할당된 기억장소의 주소
4. 변수의 영역
• 영역의 종류
• 지역변수 (Local Variable)
• block 내부에 선언된 변수
• 변수가 선언된 부프로그램이나 block 내부에서 가
시적, 외부에서는 비가시적
• 비지역변수 (Nonlocal Variable)
• 부프로그램이나 block 내부에서 가시적, 내부에 선
언되어있지 않음
• 전역변수 (Global variable)
• 프로그램 전체 영역에서 가시적인 변수
• 정적영역 규칙(Static Scope Rule)
vs 동적영역 규칙 (Dynamic Scope Rule)
• SSR이 DSR에 비해 가독성, 신뢰성, 실행 비용
면에서 우수하다.
• SSR을 적용하는 언어가 DDR에 비해 많다.
• DSR을 적용하는 언어는 SSR도 지원한다.
(perl, common lisp)
• DSR을 적용하던 언어에서 SSR을 적용하는 언
어로 발전하는 경우도 있다.
Scheme : Lisp의 방언
• 요즘 개발되는 대부분의 언어는 SSR을 적용함.
5. 포인터
• 포인터의 개념
• 메모리 주소와 특수 값 nil로 구성되는 값의 범위를 갖는 타입
• 용도
• 주소 지정 유연성(간접 주소 지정)
• 힙-동적 변수 다루기 :힙으로부터 동적으로 할당되는 변수, 무명이며, 포인터나 참조 타입 변수를 통
해서 참조 가능
• 언어의 작성력 향상 : 연결 리스트와 같은 동적 구조체 -> 노드의 최대 개수를 미리 예측할 필요 없
다
• 평가
• 일종의 필요악, 프로그램은 복잡해지지만 메모리 접근 유연성은 향상된다.
• 논점
• 포인터 변수의 영역과 존속기간
• 힙-동적 변수의 존속기간
• 포인터가 가리킬 수 있는 값의 타입에 제한이 있는가?
• 포인터의 용도는? (동적메모리 관리 또는 간접 주소지정)
• 언어가 포인터 타입, 참조 타입 혹은 둘 다를 지원하는가?