4장은 코드 중심 내용이므로 나중에 깃허브에 올려두도록 해보겠다.

5장 내용 바로 시작해보겠다.

 

  • 변수
    • 이름, 주소, 값, 타입, 존속기간, 영역(scope)
  • 이름 형식
    • 길이가 너무 짧으면 의미 포함이 불가능하다 
      • FORTRAN 95: 최대 31글자이다.
      • C99: 제한이 없으나 처음63개 문자만 의미, 외부 이름은 최대 31자에 제한된다.
      • C#, Ada, Java: 제한 없고, 이름에 포함된 모든 문자는 의미가 있다.
      • C++: 제한 없고, 흔히 언어 구현자가 제한한다.
    • 특수문자
      • PHP : 모든 변수 이름이 $로 시작한다.
      • Perl : 모든 변수이름은 특수문자 $, @, %로 시작되며 각각 scalar, array, hash타입이다.
    • 특수어
    • 키워드
    • 예약어
      • 대부분의 언어에서 특수어는 예약어이다.
  • 주소(l-value)
  • 값(r-value)

 

바인딩

  • 바인딩(binding) - 개체와 속성간의 연관
    • ex) 변수와 타입, 변수와 값, 기호와 연산 등
  • 바인딩 시기: 바인딩이 일어나는 시기
    • 언어 설계 시간 : 연산자기호와 연산간의 바인딩
    • 언어 구현 시간(컴파일러 설계 시간) : 정수 타입과 그 크기 간의 바인딩 in C
    • 컴파일 시간: 변수와 타입간의 바인딩
    • 링킹(linking) 시간 : 라이브러리 함수 호출과 함수 코드와의 바인딩
    • 적재(loading) 시간 : static 변수와 메모리 셀의 바인딩
    • 실행 시간 : 비static 지역 변수와 메모리 셀의 바인딩

 

다음 코드에서 바인딩 시기를 알아보도록 하자.

// In C

int count;

...

count = count + 5

  1. count의 타입  
    • 변수와 타입간의 바인딩이므로 컴파일 시간에 바인딩
  2. count의 가능한 값들의 집합
    • 정수 타입과 그 크기 간의 바인딩 이므로 언어 구현 시간에 바인딩
  3. 연산자 기호 + 의 의미
    • 연산자 기호이므로 언어 설계 시간에 바인딩
  4. 리터럴 5의 내부 표현
    • 정수 타입과 그 크기 간의 바인딩 이므로 언어 구현 시간에 바인딩
  5. count의 값
    • 비static 지역 변수와 메모리 셀의 바인딩 이므로 실행 시간에 바인딩

 

  • 바인딩 유형
    • 정적 : 바인딩이 실행 전에 일어나고, 실행 중에 변경 X
      • 타입 명세가 명시적이거나 묵시적
    • 동적 : 바인딩이 실행 중에 일어나고, 실행 중에 변경 O
  • 타입 바인딩
    • * 정적일 경우
    • 명시적(explicit) : 선언문을 통해 타입 명세
    • 묵시적(implicit) : 디폴트 관례를 통해서 타입 명세 => 타입 추론(type inference)
      • ex) Perl에서 $,@,%
    •  *동적일 경우
    • 변수 타입이 할당문을 통해서 명세

 

변수의 유형

  • 정적
  • 스택-동적
  • 명시적 힙-동적
  • 묵시적 힙-동적

 

 

  • 정적 변수(static variable)

     : 프로그램 실행 시작 전 에 메모리 셀에 바인딩되고, 그 바인딩이 프로그램 실행이 종료될 때까지 유지

 

     장점

      : 효율성, history-sensitive 부프로그램 (이전 값에 따라 현재 값이 달라지는 것) 지원

     단점

     : 유연성 감소( 재귀함수 불가), 기억공간이 변수들 간에 공유 불가

 

 

 

  • 스택-동적 변수(stack-dynamic variable)

     : 선언문이 세련화(elaboration)될 때 기억공간에 바인딩되는 변수

 

     장점

     : 재귀적 부프로그램 지원 , 부프로그램간 메모리 공간 공유 가능

     단점

     : 할당/회수에 따른 실행 부담, 간접 주소지정으로 느린 접근, history-sensitive  부프로그램 지원 불가

 

 

 

 

  • 명시적 힙-동적 변수(explicit heap-dynamic variable)

     : 프로그래머가 명세하는 실행시간 명령 어에 의해서 할당되고 회수되는 이름 없는 변수

      : 메모리 셀은 힙 상에 할당

      : 변수의 타입 바인딩은정적

      : 포인터나 참조 변수를 통해서 참조

          ex) Java의 객체, C++에서 new로 할당되는 객체

 

     장점

     : 동적 자료구조 생성

     단점

     : 예측 불가능하기 때문에 사용,관리 어려움

 

 

 

 

  • 묵시적 힙-동적 변수(implicit heap-dynamic variable)

     : 할당문에 의해서 할당과 반환이 이루어 지는 변수

      : 메모리 셀은 힙 상에 할당

      : 변수의 모든 속성이 값이 할당될 때마다 바인딩

   

     장점

     : 유연성

     단점

     : 컴파일러에 의한 오류 탐지 능력 상실

 

 

+ Recent posts