yekang

4장. 변수(~4.3) 본문

프로그래밍 언어론

4장. 변수(~4.3)

예캉 2017. 10. 18. 02:38
  1. 변수
변수 : 기억장소(Main Memory)의 하나의 장소(cell)를 추상화한 것.

변수의 다양한 속성들이 존재하는데 
    이름 : 변수의 이름(=식별자)
    주소 : 변수의 값이 저장될 메모리 주소(l-value)
    값 : 배정문에 의해 부여됨(r-value)
  • x=y;의 의미 : y의 값을 x의 주소에 저장한다는 의미. 여기에서 x와 y 모두 변수 이름임에도 불구하고 배정문 왼쪽의 x는 주소를 의미하고 오른쪽 y는 값을 의미한다. 이러한 이유로 변수의 주소를 l-value(배정문의 왼쪽에 나타나므로)라 부르고, 변수의 값을 r-value(배정문의 오른쪽에 나타나므로)라 부른다.
    타입(형) : 변수가 가질 수 있는 값의 범위와 이 값에 대한 연산들의 집합
    영역 : 변수의 사용이 허락되는 범위
    수명 : 변수가 메모리 주소에 할당되어 있는 기간

바인딩 : 변수에 변수와 관련된 속성을 연관시키는 것.

<바인딩 시간에 따른 바인딩 분류>
    정적 바인딩: 
    - 프로그램이 실행되기 전( 주로 컴파일할 때) 바인딩이 발생
    - 프로그램 실행 과정에서 변하지 않은 상태로 유지되는 바인딩
    - 수치 계산을 목적으로 개발되는 언어
    - 실행시간의 오버헤드를 줄이고자
    - 컴파일 언어 (동적 바인딩 하는 애들도 있음)
        -명시적 선언을 요구
    - 효율성을 중요시 함 
    - ex ) int x;
   
동적 바인딩:
    - 프로그램 실행시간 중에 바인딩이 발생
    - 프로그램 실행 과정에서 변경되는 바인딩
    - 인터프리터 언어
        - 명시적 선언을 요구하지 않음(해도 되지만 필수 아니다.// int 붙여도 되고 안붙여도 되고)
    - 융통성과 편리성
    - ex ) ptr=new int;(C++) 
    - ex) Peal
        price=10000;
       price-"very expensive";

<세분화된 바인딩 시간>

언어 정의(설계)시간 - 프로그래밍 언어를 정의할 때 이루어지는 바인딩
                                C 언어의 int 타입이 정수 값을 가진다는 의미를 바인딩
                                '+'기호에 덧셈 연산자라는 의미를 바인딩
언어 구현 시간 - 언어에 대한 번역기를 구현할 때 이루어지는 바인딩
                        C언어의 int 타입에 가능한 값의 범위를 바인딩
                        정수에 컴퓨터 내에서의 표기법을 바인딩
번역(컴파일)시간 - 원시 프로그램을 번역할 때 이루어지는 바인딩
                            다음 C 선언문에서 변수 x에 타입 int를 바인딩 // int x;
링크 시간 - 프로그램을 라이브러리와 링크할 때 이루어지는 바인딩
                 라이브러리 부프로그램 호출에 부프로그램 코드를 바인딩
적재 시간 - 프로그램의 실행을 위해 메모리로 적재할 때 이루어지는 바인딩
                전역 변수에 메모리 주소를 바인딩
실행 시간 - 프로그램을 실행할 때 이루어지는 바인딩
                다음 c 배정문에서 변수 x에 값 20을 바인딩
                x=20;


선언 : 변수에 이름과 데이터 타입 등의 속성을 무여하는 문장.
    int max(int a, int b); -> 부분적인 속성을 바인딩( 선언: 함수의 이름, 매개변수, 반환값의 타입만 기술하고 상세코드는 기술 안함)
    int max(){} ->모든 잠재적인 속성을 바인딩(정의 : 코드 포함 모두 기술)

  • 명시적 선언
- 선언문을 사용하여 변수 이름을 나열하고 이들에 속성을 부여하는 방법
- 변수 x의 데이터 타입을 예약어 int를 사용하여 명시적으로 지정
- C ,JAVA
ex) int x;

  • 묵시적 선언
- 실행 시간 중에 일어나거나 프로그램 실행 과정에서 변경되는 바인딩
- Fortran은 선언문 없이 변수 이름을 그냥 사용하면 그 이름이 선언된 것으로 간주
- 변수이름이 'i' 'j' 'k' 'l' 'm' 'n'으로 시작되면 정수 타입으로, 그렇지 않으면 실수 타입으로 선언
 - Pascal Peal Fortran

블록 : 일련의 문장 집합으로 자체적인 선언을 가질 수 있는 프로그램 단편.
- 임의의 블록 내의 선언 : 지역적
- 블록 밖의 선언 : 비지역적

영역 : 이름의 사용이 허락되고 있는 범위.

  • 정적 영역
- 이름에 해당하는 변수를 찾을 때 자신을 포함하고 있는 블록에서 선언되었는지 살펴보고 아니면 그 바깥쪽 블록에서 선언되었는지를 살펴본다.
- 컴파일 언어 대부분이 사용함
  1. 임의의 블록에 속한 선언문에 x에 대한 선언문 찾기
  2. 없으면, 임의의 블록을 포함하는 바깥쪽 블록의 선언문에서 x에 대한 선언문 찾기
  3. x에 대한 선언문을 찾을 때까지 계속됨
  4. 가장 큰 블록의 선언문에서도 x를 발견하지 못하면 선언되지 않은 변수 오류 발생

  • 동적 영역
- 이름에 해당하는 변수를 찾을 때 외향적인 구조에 기반하지 않고, 부프로그램들의 호출 순서에 기반
- 먼저 자신을 포함하고 있는 블록에서 선언되었는지를 보고
- 아니면 자신을 포함한 블록(부프로그램)을 호출한 문장을 포함하고 있는 블록에서 선언된 것인지를 조사한다.
- 해당 변수를 찾을 때까지 반복

ex)LISP


'프로그래밍 언어론' 카테고리의 다른 글

4장. 변수(~4.5)  (0) 2017.10.18
1장  (0) 2017.10.18
Comments