본문 바로가기
컴퓨터과학[2-2]/[2-2]프로그래밍언어론

프로그래밍 언어론 핵심정리

by boolean 2015. 6. 25.
728x90

프로그래밍 언어론 핵심정리

제1장 프로그래밍언어 소개

프로그래밍 언어란 

    - 컴퓨터에 프로그래머의 의사를 전달하는 방법

   - 프로그램을 작성하는 형식

   - 프로그래머가 컴퓨터를 어떻게 추상화 하는가에 영향을 미침

   - 컴퓨터가 읽을 수 있고  사람이 읽을 수 있는 형식으로 계산을 서술하는 표기체계

프로그램 이란

   - 컴퓨터와 사람이 동시에 이해할 수 있는 형식으로 작성된 글

1.1 추상화

    - 자신의 속성들의 특징적인 일부만을 가지고 주어진 작업이나 객체들을 표현하고, 그들의 공통점을 추출하여 표현하는 방법

      ① 자료 추상화 - 문자열, 수, 탐색트리와 같은 계산의 주체가 되는 자료의 특성을

                       추상화

      ② 제어 추상화 - 알고리즘 추상화. 현재의 상황에 따라 실행순서의 수정을 위한

                       제어의 특성을 추상화

     기본적 추상화: 가장 국지적인 기계정보를 수집한 추상화

     구조적 추상화: 프로그램의 구조에 대한 보다 전역적인 정보에 관한 추상화

     단위 추상화 : 단위 프로그렘의 전체 정보에 관한 추상화

1.1.1 자료 추상화

     - 추상화에 포함된 정보의 양에따라 분류

     ① 기본적 추상화 - 컴퓨터 내부의 자료 표현을 추상화

     ② 구조화된 추상화 - 구조적 자료형, 배열

     ③ 단위 추상화 - 추상 자료형, 자료 캡슐화

1.1.2 제어 추상화

     ① 기본적 추상화 - 몇 개의 기계명령어를 모아 이해하기 쉬운 추상구문으로 만든 것

     ② 구조화된 추상화 - 프로그램에서 어떤 검사된 값에따라 분할된 명령어의

                          한 그룹을 수행

                        - 부 프로그램 사용 = 프로시져 = 서브루틴

        ◉ 프로시져 추상화 - 프로시져는 이름과 실행해야 할 동작이 결합

                           - 프로시져는 실제 실행되어야 할 곳에서 호출되어야 한다

     ③ 단위 추상화 - 프로시져의 집합을 추상화 하도록 추상화


1.2 계산전형


1.1.1 명령형 언어

     - 절차 언어

     - 순차적인 명령의 수행을 기본개념으로 하는 언어

1.1.2 함수형 언어

    - 함수 개념에 기반을 둔 언어

    - 계산기술이 함수의 평가, 즉 알려진 값을 함수에 적용하는 것에 기반

    - 적용형 언어 (application language)

1.1.3논리형 언어

    - 기호논리학에 기반을 둔 언어

    - 계산 내용만 선언하듯이 기술

    - 선언적 언어 (declarative language)

1.1.4 객체지향 언어

    - 객체에 기반을 두고 있는 언어


1.3 언어 정의

1.1.1 구문론(syntax)

    - 형식화가 많이 되어 있는 부분

    - 언어의 표현적인 구조만을 정의

    - 대부분의 언어가 문맥자유(context free) 문법 사용

1.1.2 토큰(token)

    - 프로그래밍 언어의 어휘구조

1.1.3 의미론 (semantics)

    - 프로그램 실행 시 어떠한 일이 일어나는가를 기술
제2장 언어의 변천

디지털 컴퓨터 이전의 언어

   - 찰스 베비지 : 수치계산을 처리하기 위해 차분 엔진과 분석엔진 설계, 분석엔진은 오늘날의 컴퓨터와 구조가 유사하다.

   -오거스타: 세계최초의 프로그래머로 인식


2.1 1950년대:실행의 효율성(프로그램의 실행속도), 판독성(프로그램의 읽기능력)

    -저급언어: 기계의 의존적인 이진수 개념이거나 자연언어와 차이가 많은 언어,사람이 이해하기보다는 컴퓨터의 내부구조에                의존적인 언어

    - FORTRAN:최초의 고급언어,응용과학 분야에서 우위를 차지하고 있음

    -COBOL: 미국방성에서 해군 그레이스 호퍼가 이끈 팀에 의해 만들어짐, 은행이나 대규모 회사에서 서류처리와 같은 사무                 처리를 위해 재빨리 선택됨

    -Algol60:알고리즘을 기술하기 위한 일반적인 표현 언어

    -LISP: 일반적인 리스트 구조와 함수의 응용을 기본으로 한 언어

    - APL: 배열과 행렬을 포함하는 수학적 연산을 쉽게 프로그램을 하기 위한 언어, IBM에선 시작

2.2 1960년대:복잡성제어(추상화 기법,규칙과 제한의 최소화)다양한 언어들의 출현

    -Simula:노르웨이 컴퓨터 식터에서 뉘고르와 달에 의해 탄생, 시뮬레이션을 위해 디자인 됨, 객체지향언어의 기본이되는 클             래스 개념 도입

    -BASIC: 다트머스 대학교의 존 케머니와 토머스 커츠가 개발, 새로운 시분할 시스템을 위한 간단한 언어로 개발

    - PL/I, Algol68, Snobol, 

2.3 1970년대: 간결성, 추상화 그리고 효율성

    - C : 벨연구소의 데니스 리치 에 의해 고안, 컴퓨터구조에 대한 접근을 제공해 주는 개념, 중급 프로그래밍 언어

    - PASCAL : Algol의 개념 도입, 복잡하거나 교육적 목적에 부합되지 않는 주요기능은 생략, 교육용으로 뿐만 아니라 상업               적으로 도 높은 기능성 갖춤

    - CLU, Euclid, Mesa

2.4 1980년대:논리, 수학적 개념 , 통합과 새로운 방향

1980년 - C++ (처음 이름은 C with classes였으나 1983년 7월 이름이 C++로 변경됨)

            C언어 확장, 비야네 스트롭스트롭이 개발

1983년 - ADA: 1980년대를 대표할 수 있는 중요한 프로그래밍언어로서 미국방성의 주도로 탄생되었고, J             이치바이어가 이끈 개발자들은 자료추상화, 타입 메커니즘(Package), 병행처리(task)와 예외처리 등             의 특징을 처음 도입

1984년 - Modula-2 : 니클라우스 워스가 개발, 운영체제를 구축하기 위해 고안된 Modula라는 언어를 기반으          로 하는 언어로서 추상화와 부분적 동시처라 개념과 내장형 시스템 프로그래밍을 목적으로 하드웨어          에 쉽게 접근할 수 있는 기능도 추가한 다목적 언어

1984년 - ML(Meta Language) : 에든버러 대학교의 로빈 밀너가 개발한 문법과 타입검사가 훨씬 유연함

1985년 - Prolog : 콜메로에르 가 이끄는 구룹에 의해 마르세유에서 개발 인공지능 분야에서 많이 쓰이고 있             고 모범적인 언어로 인식됨

1986년 - Smalltalk:n: 제록스사의 팰로멜토 연구소에서 엘런케이, 댄 인갈스와 다른 연구자에 의해 개발, 객               체지향 접근방식으로 일관된 객체지향언어의 순수한 모범케이스

1986년 - Erlang

1987년 - Perl

1988년 - Tcl

1988년 - 매스매티카(Mathematica)

1989년 - FL (Backus);

 2.5 1990년대 : World Wide Web 프로그래밍(Java)

Java : 1990년대 가장 특징적인 프로그래밍 언어이며 WWW 프로그래밍을 쉽게 구현가능하고 자바가상기계(JVM)위에서 동작        하기 때문에 다양한 응용분야에 적합하다

Java 애플릿 : 웹 클라이언트에서 실행될 수 있는 작은 프로그램


제3장 프로그래밍 언어 설계

3.1 역사와 설계 기준

    - 초기 : 실행의 효율성(프로그램의 실행속도), 판독성(프로그램의 읽기능력)

    - 60년대 : 복잡성제어(추상화 기법, 규칙과 제한의 최소화)

    - 70년대 : 간결성, 추상화

    - 80년대 : 논리, 수학적 개념

3.2 효율성

    - 판독성과 유지보수 능력은 효율성에 관한 매우 중요한 쟁점

    - 여러 가지 형태의 다른 기준들을 포함

    ① 목적 코드의 효율성 - 효율적인 실행코드를 생성할 수 있도록 언어 설계가

                            이루어져야 함 - 최적화

    ② 번역의 효율성 - 원시코드가 효율적으로 번역되도록 허가 하는가?

    ③ 프로그래밍 효율성 - 프로그램 작성 능력

3.3 일반성, 직교성, 획일성

    ① 일반성 - 특별한 경우를 피하거나 밀접하게 관련이 있는 여러 개념들을 일반적인

                하나의 개념으로 결합

    ② 직교성 - 언어 구성자들이 각각의 의미를 가진 채 결합될 수 있음을 의미

    ③ 획일성 - 유사한 것들은 유사하게 보여야 하고, 유사한 의미를 가져야 하며, 반대로

                서로 다른 것들은 다르게 보여야 함

3.4 기타 설계원칙

    - 간결성

    - 표현력 : 언어가 복잡한 과정이나 구조를 표현하는데 용이

    - 정확성 : 언어의 행위가 예측될 수 있도록 하는 정의

    - 기계 독립성 : 특정 기계에 독립적 언어 정의

    - 보호성 : 프로그래머가 만들 수 있는 오류의 수를 최소화

    - 일관성

    - 확장성

    - 제약성

 


제4장 프로그래밍 언어 구현과 바인딩

4.1 프로그래밍 언어 구현 기법

4.1.1 번역기법(Fortran, Algol, PL/I, Pascal, Cobol, C, Ada .......)

     - 기계어로 번역하여 기계어 프로그램을 만들어 실행 시키는 방법

     ① 컴파일러 - 원시언어(고급언어) → 목적언어(기계어에 가까운 저급언어인 번역기)

     ② 어셈블러 - 원시언어(어셈블리어) → 목적언어(준 기계어)

     ③ 링키지에디터 - 재배치 형태의 기계어로 된 여러개의 프로그램(컴파일된 목적코드,

                       라이브러리)을 묶어 로드모듈이라는 어느정도 실행가능한 하나의

                       기계어로 번역

     ④ 로더 - 로드 모듈로된 기계어 프로그램을 실제 실행 가능한 기계어로 번역하여

               주기억 장치에 적재

     ⑤ 프리프로세서 - 원시언어(고급언어) → 목적언어(고급언어)

4.1.2 인터프리터 기법(Lisp, Snobol4, APL, Prolog)

     - 고급 언어로된 프로그램을 자료로 읽어 들여서 기계어 수행과 동일한 알고리즘으로

       그 프로그램의 각 문장을 디코딩하고 실행시킴

4.1.3 비교

     - 입력자료는 고급언어로된 프로그램으로 같지만 출력은

        번역기 - 입력 프로그램과 동일한 목적 언어로 된 프로그램

        인터프리터 - 직접 입력 프로그램을 실행

     ① 번역 기법 : 장점 - 반복문이나 부 프로그램 호출이 많은 프로그램 실행시 전체

                           실행시간 면에서 매우 효율적

                    단점 - 번역 프로그램이 큰 기억장치 요구할 수 있다

     ② 인터프리터 기법 : 장점 - 추가의 기억장소 필요없음

                     단점 - 실행되는 동안 디코딩하는 시간을 매우 많이 요구할 수 있다

4.2 속성과 바인딩

4.2.1 바인딩 개념

     - 바인딩 : 이름에 어떤 속성을 연결하는 과정, 속성이 결정되는 행위

     - 바인딩 시간 : 바인딩이 발생되는 시간

4.2.2 바인딩 시간의 종류

   (1) 실행시간 - 동적 바인딩 : 프로그램 실행시간에 이루어지는 바인딩

                  ex) 변수값의 확정, 변수와 자료구조에 기억장소를 할당

       ① 모듈의 시작시간 - 모듈 프로그램(부프로그램, 블록) 실행 시작시간에 발생하는

                            바인딩

                            : 형식매개변수와 실매개 변수간의 바인딩

                            : 지역변수들에 대한 기억장소 할당

       ② 실행시간의 사용 시점 - 프로그램을 실행하는 동안 사용 시점에서 수시로

                                 발생하는 바인딩

   (2) 번역시간 - 정적 바인딩 ex) 변수의 형, 자료구조의 형과 크기등을 확정하는 바인딩

                - 구성 : 컴파일 시간, 링크시간, 로드시간

   (3) 언어 정의시간 - 프로그래밍 언어의 구조 확정

   (4) 언어 구현시간 - 언어를 실제 컴퓨터에 구현시 그 언어의 원소들에 관한 특성의

                       일부를 확정

4.2.3 바인딩 시간의 중요성

     - 프로그래밍 언어들 간의 가장 중요하고 미묘한 대부분의 차이점들은 바인딩 시간의

       차이에서 발생

 


제5장 구문정의

5.1 BNF표기법

    ① 식별자 정의

       <identifier>::=<letter>|<identifier><letter>|<identifier><digit>

       <letter>::=A|B|C| ..... |X|Y|Z

       <digit>::=0|1|2|3|4|5|6|7|8|9

      ◉ 메타기호

         ::= 정의

         | 택일

         <> nonterminal기호, 다시 정의될 대상

    ② EBNF 표현

       <identifier-name>::=<alphabet>|{<alphanumeric>}

       <alphanumeric>::=<alphabet>|<digit>

       <alphabet>::=A|B|C| ..... |X|Y|Z

       <digit>::=0|1|2|3|4|5|6|7|8|9

      ◉ 메타기호

         {} 반복

         [] 선택적인 부분

5.2 구문도표

    ① termanal x

    ② nonterminal B

    ③ A::=a1|a2|a3|....|aN

    ④ EBNF A::={a}

    ⑤ EBNF A::=[a]

    ⑥ EBNF A::=(a1|a2)b

5.3 파스 트리

    - 표현이 주어진 BNF에 의해 작성될 수 있는지를 확인하기 위해 만들어진 트리

        

제6장 변수, 수식 및 제어문

 


6.1 변수

    ◉ 정의 : 이름, 속성(attribute)의 집합, 참조(reference), 값(value)의 4요소로 구성

 


6.2 선언문

    ◉ 정의 : 실행시 사용될 자료의 속성을 언어의 번역기에 알려주는 프로그램 문장

    ◉ 선언문의 목적(이점)

       ① 효율적인 주기억 장치 사용과 접근 방법이 가능

       ② 보다 효율적인 주기억 장치 경영이 가능

       ③ 정적 형 검사 가능 - 실행시간에 영향

 


6.3 배정문

    ◉ 정의 : 변수의 내용을 변경하는 원시 연산

6.3.1 l-value 와 r-value

    - l-value : 변수 이름을 참조와 관련시켜 언급

    - r-value : 변수 이름을 값과 관련시켜 언급

      ● A := B

        - A : 참조(위치)를 의미, l-value

        - B : 값을 의미, r-value

     ex)

                 상수의 경우 (A = 123)  →  r-value 만을 가지며 l-value는 가지지 못함

                      K = (A + D) / C  →  l-value를 가지지 못함

         변수 A,B가 포인터일 때 A = B  →  r-value가 없다

                              포인터 P  →  P의 r-value는 P가 지적하는 위치가 되며

                                             l-value는 P 자신의 값이 들어 있는 위치

                              배열 A[i]  →  l-value는 배열 A에서 i번째 원소의 위치

                                            r-value는 그 위치에 저장되어 있는 값

6.3.2 배정문의 구현

    - 배정문 A = e에서

    - 수식 e의 자료형이 저장할 변수 A의 자료형과 서로 상이할 경우 해결방안

      ① 수식 e의 값을 계산하여 현재 A의 속성과 동일하도록 e의 값을 형 변환

      ② A의 속성을 계산된 e의 계산값과 동일한 형으로 변환

6.3.3 배정 연산에 관한 사항

 


6.4 상수

    ◉ 정의 : 식별자로 주어지며 프로그램 수행중 값이 변하지 않음

     - l-value가 없음

 


6.5 수식

    ◉ 목적 : 계산될 값을 기술하는 것

    ◉ 구성 : 상수나 변수 같은 오퍼랜드들과 연산자들 그리고 사용 가능한 함수호출로

              이루어짐

     - 산술, 관계, 논리

     - 명확성 요구

 


6.6 조건문

    ◉ if문

    ◉ case문

 


6.7 반복문

    ◉ 괄호       ◉ loop-repeat문

    ◉ while문    ◉ repeat문

    ◉ for문

6.8 GOTO문

6.8.1 레이블과 goto문

     - 레이블과 goto문의 기본 사용법

        ① 레이블을 번역하는 동안 그 위치를 지적하는 태그(tag)로만 사용

        ② 레이블을 실행시간에 계산은 못하지만 제한된 자료항목으로 간주

        ③ 레이블을 실행시간 동안의 제한이 없는 자료항목으로 간주

6.8.2 goto문의 장단점

  - 장점 : 일반적인 컴퓨터에서 간결한 형태의 goto문 제어구조가 곧바로 하드웨어로 제공

         : goto-레이블 구조가 완전한 범용성을 가지고 있다

  - 단점 : 프로그램이 매우 빈약하게 디자인 됨

         : goto문의 많은 사용이 프로그램을 디버그하고, 이해하고, 유지보수하기 어렵게

           만듬

 


제7장 자료형(기본 자료형, 구조 자료형)

7.1 자료형과 형 선언

    ◉ 자료형 : 구성원이 될 수 있는 자료들의 집합

              : 객체들의 집합과 이 객체들의 실체들을 생성, 작성, 소멸, 수정, 분해하는

                연산들의 집합

    ◉ 자료형과 관련한 쟁점

       - 자료형에 관한 정보를 번역 시간에 주어야 하는지 실행시간에 주어야 하는지

         * 강 자료형 : 자료형에 관한 모든 특성들이 컴파일 시간에 확정되는 프로그래밍

                       언어

       - 두 자료형이 적법(compatible)할 수 있는지 또는 동치관계 인지를 결정할 수 있는

         기법을 어떻게 제공해야 하는지

       - 매개변수에 관한 문제 : 자료형을 매개변수화하기 위한 방법과 매개변수들의 평가

                                시점에 관한 것

    ◉ 스칼라 형(scala type) = 기본 자료형 : 자료형의 영역이 상수값들로만 구성되어있는

                                            자료형들(정수형, 실수형, 논리형, 문자형 등)

    ◉ 구조형(structured type) : 자료형의 영역이 자료들의 집합을 구성원으로 하여 구성

                               (배열, 레코드)

7.2 열거 자료형

 


7.3 기본 자료형

7.3.1 수치형

     - 장점 : 연산 속도가 매우 빠르다

     - 단점 : 고급언어로 작성된 프로그램을 한 기계에서 다른 기계로 이동 시키고자 할

              때 어려움 초래

  * Algol 68에서

    ◉ 확장(widening) - 값이 정수 또는 실수에서 배정도로 변환될 때 정보의 손실이 없다

    ◉ 축소(narrowring) - 실수를 정수로 변환하는 경우 일부 정보를 손실하게 된다

7.3.2 논리형

7.3.3 문자형

    ◉ 범용성 고급언어가 문자열 조작을 위해 갖추어야할 특성

       - 문자열 자료형 허용

       - 관계 연산자를 문자열 비교에 그대로 사용할 수 있도록 보편화

       - 문자열 분해, 조립 연산 제공

    ◉ PL/I의 문자열 변수 선언 방법

       - DCL A CHAR(10) : 길이가 10인 문자열 변수 A를 선언

       - DCL B CHAR(80) VARYING : 최대 80 문자의 길이를 갖는 문자열 변수 B 선언

       - DCL C PIC 'AAXX99' : 저장될 문자열이 충족시켜야할 조건이 함께 주어짐

                         : 변수 C에 처음 두 문자는 영문자나 공백, 다음 두 문자는 어떤

                           문자도 가능, 마지막 두 문자는 숫자를 써야함을 선언

7.3.4 Snobol에서의 문자열 배열

 


7.4 포인터 자료형

    - 포인터 : 어떤 객체에 대한 참조

    - 포인터 변수(point variable) : 객체를 참조하기 위한 주소를 값으로 취하는 식별자

 


7.5 구조 자료형

7.5.1 배열    ◉ 정의 : 집합체에서의 위치로 원소를 식별하는 동질형 자료 모임

7.5.2 레코드  ◉ 정의 : 이름으로 원소를 식별하는 이질형 자료 모임

 


7.6 자료형의 변환

 


7.7 자료형의 동치

  ◉ 이름 동치 : 두 변수를 함께 선언하거나 동일 식별자 이름을 사용해서 선언하면

                 두 변수는 동일형으로 인식

  ◉ 구조적 동치 : 자료형의 구성요소가 모든 측면에서 같다면 두 변수는 동일형으로 인식

 


제8장 식별자 영역과 수명

8.1 식별자 영역

    ◉ 영역(scope) : 식별자(변수)가 그 이름이 인식되어지는 공간

                   : 그 이름의 사용이 허락되고 있는 프로그램 범위

 


8.2 정적 영역 규칙과 동적 영역 규칙

8.2.1 정적 영역 규칙(static scope rule)

     - 식별자의 영역이 번역시에 결정(컴파일러 언어)

    ◉ 지역(local) 변수 - 정적 내포 관계를 유지하는 블록 구조 언어에서 선언된 변수와

                         형식 매개 변수

    ◉ 비지역(non-local) 변수 - 블록을 내포하고 있는 외부 블록에서 선언된 변수

    ◉ 전역(global) 변수 - 전체 프로그램을 영역으로 하는 비지역 변수

    ◉ 영역 구멍(hole-in-scope) - 실수형으로 선언된 변수 x가 블록 내에서 정수형으로

                                 재선언되었을 경우 그 블록에서 벗어날 때까지 이전에

                                 선언된 속성은 무효가 되어 블록 내에서는 x가 정수형

                                 으로 사용되고 블록 외에서는 실수형으로 사용되는 현상

8.2.2 동적 영역 규칙(dynamic scope rule)

     - 식별자 영역을 작성된 프로그램 문맥으로 해결하지 않고 프로그램이 실행되고 있는

        순서를 가지고 해결하는 방법

     - 식별자의 영역이 실행시간에 결정

 


8.3 주요 언어에서의 영역 규칙

 


8.4 변수의 수명

   ◉ 수명(lifetime or extent) : 생성된 메모리가 사용되는 기간 : 생성과 소멸 사이의 기간

                             : 값을 넣기 위한 기억 장소를 할당받고 있는 동안

 


   - 동적 수명이 프로그래밍언어에서 사용될 때 기억장소를 회수하는 방법

     ① 기억장소를 실행시간 내내 할당하다가 주프로그램 종료시 회수

     ② 기억장소가 다시 사용될 수 있도록 할당된 기억장소를 포기하는 명시적 명령어를

        제공(PASCAL의 dispose, PL/I의 free)

     ③ 프로그램에 더 이상의 참조가 없더라도 계속 기억장소에 존재하게 하다가

        새 기억장소가 요구되는 경우 이들 기억장소를 회수하여 재생

        (garbage collection : 기억장소를 계속 할당하다가 사용가능한 기억장소 pool이

                            작아지면 자동적으로 사용하지 않는 기억장소들을 모아 사용

                            가능하도록 재생)

※ 프로그래밍 언어들에서의 영역과 수명

   ① Fortran - 영역 단위 : 서브루틴, FUNCTION

              - 변수 영역 : 지역 변수

              - 변수 수명 : 전체 프로그램의 생존기간과 동일

   ② Algol 60 - 영역 단위 : 블록과 프로시져

               - 변수 영역 : 지역 변수

               - 변수 수명 : 한 영역이 활성화되는 시점에서 그 영역을 벗어날 때까지

   ③ Pascal - 영역 단위 : 프로시져, FUNCTION

             - 변수 영역 : 지역 변수

             - 변수 수명 : 한 영역이 활성화되는 시점에서 그 영역을 벗어날 때까지

                : 전체 프로그램 생존기간(new 함수 사용하여 레코드의 동적 할당 시)

                : new 함수의 실행과 dispose 함수 실행시간 사이

                 (new 함수 사용하여 dispose 함수 제공 시)

   ④ Ada - 영역 단위 : 프로시져, 블록, 패키지, 태스크

           - 변수 영역 : 지역변수

           - 변수 수명 : 한 영역이 활성화되는 시점에서 그 영역을 벗어날 때까지

 


제9장 기억 장소 할당

9.1 정적 및 동적 기억장소 할당

   - 정적 기억장소 할당을 가능하게 하기 위한 기본조건

     ① 사용된 모든 배열은 확정된 고정 크기로 선언되어야 함

     ② 부 프로그램은 되부름이 허용되지 않는다

 


9.2 단위 프로그램

   - 지역변수(local variable) : 단위 프로그램에서 선언하여 사용하는 변수

   - 활성화 상태(activated state) : 한 단위 프로그램의 실행 시작부터 종료까지

   - 단위 활성화(unit activation) : 실행 시간에 한 단위 프로그램이 표현된 상태

      ① 코드부(code segment) : 프로그램의 명령어들로 구성됨. 고정크기로 내용 불변

      ② 활성 레코드부(activation record) : 단위 활성화의 지역변수에 관련된 자료들을

                                          비롯한 프로그램 실행에 필요한 모든 정보를

                                          가지고 있음. 내용 가변적

        * 오프셋(offset) : 주어진 활성레코드 안에서 한 자료에 대한 상대 위치

 


9.3 정적 기억장소 할당

    - FORTRAN 4, COBOL

    - 정적 변수(static variable) : 번역시간에 크기가 고정되며 번역시간에 할당되는 변수

    - 정적 기억장소 할당

       : 각 단위 프로그램에서 요구하는 기억장소의 크기는 실행시간 전에 확정되며,

         프로그램이 실행하는 동안에 그 크기가 변하지 않는다.

       : 언어에 대한 적응성이 적어진다.

         (되부름이 허용안됨. 실행중 배열의 크기를 변화시킬 수 없다.) 

       : 활성화되지 않을 수도 있는 활성 레코드 역시 주기억 장소를 항상 차지하게 됨

 


※ 동적 기억장소 할당기법을 사용하는 언어

   ① Algol 형태의 블록중심 언어 - 컴파일러를 사용하여 구현되는 언어

     (Algol 60, Pascal, C, Algol 68, PL/I, Ada) : 스택기반 기억장소 할당

   ② 인터프리터 기법을 사용하여 구현되는 언어(APL, Lisp, Snobol 4, Prolog, Java)

9.4 스택기반 기억장소 할당

    - Algol 형태 언어 : 변수들의 영역을 제한하고, 프로그램을 적당한 단위 프로그램으로

                        나누어 구성할 수 있도록 블록개념을 도입한 언어(모든 단위 프로

                        그램들은 서로 공용부분이 없거나 내포관계(nested)에 놓여야 함)

    - 단위 프로그램

       ① 블록 : 정상적인 프로그램 실행 과정에서 차례가 되었을 때 활성화

       ② 부 프로그램 : 호출문에 의해 호출되었을 때 활성화

◎ 스택기반 기억장소 할당 방법

  (1) 활성 레코드의 크기가 정적으로 확정되는 경우(그림 9.3, 9.4, 9.5)

    - 단위 프로그램이 활성화되는 시점에서 지역 변수들이 생성

    - 지역 변수들이 필요로하는 기억장소 용량은 번역시간에 이미 확정

    - 준정적 변수(semistatic variables) : 변수에 대한 실제 주소가 실행시간에 바인딩

  (2) 단위 프로그램이 활성화되는 시점에서 활성 레코드의 크기가 확정되는 경우(그림 9.6)

    - 단위 프로그램이 활성화되는 시점에서 지역변수들이 모두 생성되며

    - 이때 지역변수가 요구하는 기억장소의 크기가 확정

    - 준동적 변수(semidynamic variables)

       : 준정적 변수 개념 + 번역 시간에 단위 활성 레코드에서 지역 변수들의 offset이

        상수값으로 확정되지 못하여 주소에 대한 최종 확정을 실행시간 까지 늦춰야 된다

  (3) 활성 레코드가 동적으로 변하는 경우

    - 프로그램 실행중에 새로운 자료값이 생성되고 회수되어 활성 레코드의 크기가 변함

    - 동적변수(dynamic variable) : 활성 레코드가 활성화되는 시점에서도 활성 레코드의

                                  크기를 알 수 없는 변수

* 힙(heap) : 동적변수를 할당하기위한 기억장소로서 자유롭게 사용할 수 있는 기억장소를

             의미한다

* 스택 변수 - 준동적 변수나 준정적 변수

  힙 변수 - 동적 변수

9.4.4 비지역 변수의 참조 방법(그림 9.7)

    (1) 정적 체인 사용 기법(그림 9.8)

        - 모든 활성 레코드에 정적링크라고 부르는 포인터를 할당하여 작성된 프로그램의

          정적 내포관계에 있는 활성 레코드를 가리키게 함

    (2) (그림 9.9)

    (3) 디스플레이 사용 기법(그림 9.10)

        - 단위 프로그램의 호출과 반환횟수에 비하여 비지역 변수들의 사용이 상대적으로

          증가할 경우 유리

 


9.5 힙 기억장소 할당

    - 인터프리터 기법

 


제10장 부 프로그램

10.1 개요

    - 부 프로그램 : 함수(function), 서브루틴(subroutine or procedure)

    - 프로시져의 4구성 요소

       : 프로시저이름, 매개변수(parameter) 리스트, 몸체(body), 환경(environment)

 


10.2 매개변수 평가와 전달 기법

10.2.1 형식 매개 변수와 실매개 변수

      - 형식 매개 변수 : 부 프로그램이 실행되는 동안에 식 또는 다른 이름을 대신하여

                         그 프로그램에서 사용되는 이름

      - 실 매개 변수 : 부 프로그램이 실행되는 동안에 사용되는 원래의 식 또는 이름

10.2.2 Call by reference(by address, by location)

      - 참조 전달 기법 : 실매개 변수 주소를 대응되는 형식 매개 변수에 보내는 방법

10.2.3 Call by value ; Call by result

      - 값 전달 기법 : 호출된 부 프로그램 자신이 형식 매개 변수에 해당되는 기억 장소

                       를 별도로 유지하는 방법

                     : 호출한 프로그램이 실매개 변수에 해당되는 주소를 보내면 호출된

                       부 프로그램은 r-value를 구하여, 그 자신이 보유하고 있는 형식

                       매개 변수의 기억장소에 복사하여 다른 지역변수와 동일하게 취급

      - 결과 전달 기법 : caller가 형식 매개 변수값을 저장할 기억장소를 보유

      - 값-결과 전달 기법 : 형식 매개 변수를 지역변수로 간주하며 caller가 시작부에서

            실매개 변수값을 형식매개 변수의 초기값으로 복사해 와서 실행한 후 반환되기

            직전에 형식매개 변수의 최종값을 실매개 변수에 다시 복사하는 방법

10.2.4 Call by name

      - 이름 전달 기법 : 형식 매개 변수의 이름이 사용될 때마다 그에 대응되는 실매개

                         변수 그 자체가 사용된 것처럼, 필요한 r-value or l-value를

                         매번 구하여 실행하는 방법

 


10.3 형식 매개 변수 명세

 


10.4 프로그래밍 언어에서 유해한 특징들

10.4.1 부작용 - 지역 변수이외의 변수값을 변화시키는 것

10.4.2 이명 - 한 단위 프로그램에서 동일한 기억장소를 함께 사용하고 있는 다른 이름의

             변수들

 


10.5 연산자 중복 표현

 


10.6 포괄 기능

 


10.7 코루틴(그림 10.5)

    - 호출된 프로시저의 수행이 완전히 끝나기 전에 호출한 프로시져로 제어를 반환하는

      프로시져

 

 

 

제11장 자료 추상화

* 자료추상화의 두가지 관점

  ① 자료를 그 자료를 처리할 연산과 함께 선언할 수 있다는 점

  ② 정보은닉 개념을 도입하여 프로그램을 쉽게 읽을 수 있고 유지 보수를 용이하게 한 점

11.1 소개

    ◉ 추상화 : 자신의 속성의 일부만을 가지고 주어진 작업이나 객체들을 필요한 정도로

               묘사할 수 있는 방법을 지원

    ◉ 프로시져 추상화 : 어떻게 수행되는가를 묘사

    ◉ 자료 추상화 : 자료형의 표현과 그에 관련된 연산들을 함께 묶어 캡슐화 하는 기법

      * 캡슐화 : 부적당한 사용으로부터 자료형을 보호하기위한 벽을 형성

        창문(window) : 사용자가 잘 정의된 방법으로 호출하여 사용하는 것을 허락

        공개부(public part) or 가시부(visible part) : 창문을 통해서 외부에 알려주는 부분

        전용부(private part) : 벽으로 보호하는 부분

        방출(export) : 공개하는 행위

        도입(import) : 다른 모듈 프로그램에서 방출된 객체들을 사용할 수 있도록

                      연결하는 행위

    ◉ 자료 추상화에 관한 가상적인 형태

       - structur : 자료 추상화 개념에 대한 새로운 이름으로 시작은 structur로 영역의

                   한계는 end로 표현

 


11.2 Ada의 자료 추상화

 


11.3 C++의 자료 추상화

    ◉ 클래스를 제공하여 자료 추상화를 지원

       - new, delete : 자유 기억 장소에 할당(new)하고 회수(delete)하기 위한 연산자

       - 생성자 함수 : constructor : new 연산자 사용

         소멸자 함수 : destructor : delete 연산자 사용 

댓글