본문 바로가기
CS/프로그래밍언어론

프로그래밍 언어론 서브프로그램, 서브루틴, 정적 체인, 동적 체인, 디스플레이 방식 요약 정리 문제 풀이

by Renechoi 2023. 12. 8.

서브 프로그램 개요

  1. 프로그램이란 컴퓨터가 실행할 명령어의 나열 -> 프로그램 실행을 통해 입력을 출력으로 바꿈

  2. 서브프로그램이란 독자적인 입력과 출력을 갖춘 프로그램 조각

  3. 서브프로그램의 입력을 인수, 서브프로그램의 출력을 반환 값이라고 함

  4. 반환 값이 없는 서브프로그램은 프로시저라고 부르고, 프로그래밍 언어 개발 초기에는 인순도 없고 반환값도 없는 형태의 서브프로그램을 서브루틴이라고 지칭했음

  5. 서브프로그램의 특징 중 하나의 입구는 서브프로그램으로 들어가는 입구는 하나라는 것

  6. 서브프로그램의 특징 중 여러 출구는 서브프로그램에서 나가는 출구는 여러 곳이 될 수 있다는 것

  7. 서브 프로그램의 맨 끝은 자동적으로 출구가 되지만, 별도의 return 문을 통해 명시적으로 서브프로그램의 출구를 지정해줄 수 있음

  8. 서브프로그램을 호출한 프로그램은 호출된 서브프로그램이 수행되기 전에 수행이 정지되며 호출자에서 피호출자로 제어 흐름이 이전됨

  9. 서피호출자의 수행이 완료되면 호출자로 제어흐름이 복귀되며 호출자의 수행이 재개됨

  10. 함수 : 명시적 반환값이 있 서브프로그램

  11. 프로시저: 명시적 반환값이 없는 서브프로그램

  12. 서브루틴: 프로그래밍 언어 초기의 서브 프로그램, 인수 및 반환값 전달이 명확하지 않음, 입구가 여러 개 될 수 있음

  13. 서브프로그램 관련 용어

    • 서브프로그램 정의: 서브프로그램을 호출하였을 때 어떻게 수행되어야 하는지 서브프로그램의 작동을 기술한 ㄴ부분
    • 서브프로그램 호출: 서브프로그램이 수행될 것을 요구하는 부분
    • 허브프로그램 헤더: 서브프로그램의 정의 앞부분에서 서브프로그램의 이름, 종류, 매개변수 선언 등을 포함하는 부분. 통상 서브프로그램 정의의 첫 줄이 서브프로그램 헤더가 됨
    • 서브프로그램 본체: 서브프로그램의 정의 중에서 서브프로그램이 호출되었을 때 실행되는 부분. 대개 서브프로그램의 정의 중에서 서브프로그램의 헤더를 제외한 부분이 됨
    • 매개변수 프로파일: 서브프로그램 매개변수의 개수, 순서, 타입을 의미 -> 시그니처 라고도 부름 -> 같은 이름의 서브프로그램이 여러 개 오버로딩된 경우 서브프로그램 호출과 일치하는 서브프로그램을 찾는 데 사용
    • 서브프로그램 프로토콜: 서브프로그램의 매개변수 프로파일과 더불어 함수의 경우 반환 타입을 포함하여 서브프로그램의 프로토콜이라고 부름 -> 서브프로그램 호출 시 타입 검사를 위해 필요 -> 정적 타입 언어는 서브프로그램 호출 전에 서브프로그램 프로토콜이 명시될 것을 규정 -> 서브프로그램 선언
  14. 서브프로그램 정의에서 외부로부터 전달될 정보를 받기 위해 선언한 변수를 형식인수라 부르고 서브프로그램 호출시 형식인수로 전달될 실제 값이나 3주소를 실인수라고 부름

  15. 위치에 의한 대응은 여러 언어에서 채택되고 있음

  16. 키워드에 대한 대응은 형식 인수 이름에 의한 대응 방법 -> 형식 인수 순서를 기억하지 않아도 되나 형식인수 이름을 기억해야 함

  17. 기본인수는 실인수가 주어지지 않을 경우 사용하는 값 -> 형식인수의 기본값임

  18. 가변인수 서브프로그램이란 받을 수 있는 인수 개수가 여러 개가 될 수 있는 서브프로그램을 의미함

  19. 인수 전달 모델은 의미적 모델, 개념적 모델, 구현 모델로 나누어 생각할 수 있음

  20. 의미적 모델은 프로그래머가 어떤 용도로 인수를 사용하느냐 하는 관점에서 바라본 모델

  21. 개념적 모델은 자료 이동 측면에서 인수 전달 방식이 도식적으로 어떤 방식인지에 관한 모델

  22. 구현 모델은 구현 관점에서 프로그래밍 언어가 인수 전달을 어떻게 구현하는지에 따른 모델

  23. 의미적 모델에서 인수전달은 다음 세 가지 모드로 구별 -> 1) 입력모드: 호출자의 실인수가 피호출자의 형식인수로 전달됨 2) 출력 모드: 피호출자의 형식인수가 호출자의 실인수로 전달됨 3) 호출자와 피호출자 사이의 양방향 전달이 모두 발생함

  24. 개념적 모델은 다음 두가지로 구별 : 1) 값전달 -> 실 인수의 값을 물리적으로 복사하여 전달 2) 참조 전달 - 실인수의 값을 참조할 수 있는 경로 전달

  25. 구현 모델은 다음과 같이 구별-> 1) 값전달: 실인수 값을 형식인수에 복사하여 전달 2) 결과 전달: 형식인수 값을 실인수에 복사하여 전달 3) 값-결과 전달 : 호출시 실인수 값을 복사하여 전달하고 복귀 시 형식인수 값을 복사하여 전달 4) 참조 전달: 실인수에 대한 참조 경로 전달 5) 이름 전달 : 실인수 이름을 전달

  26. 값전달: 실인수 값을 형식인수에 복사하여 전달

    • 입력 모드의 인수 전달 구현
    • 대부분의 언어에서 채택
    • 구현방법 1
      ► 데이터를 물리적으로 복사
      ► 시간적,공간적으로 비효을적(예: 큰 배열)
      int elem(lvlatrix int row, int col);
    • 구현방법 2
      ► 참조경로전달및쓰기금지
      ► 간접참조에따른시간부담
      int elem(const Matrix *mp, int row, int col);
  27. 결과 전달: 형식인수 값을 실인수에 복사하여 전달

    • 출력 모드의 인수 전달 구현
    • 구현방법 1
      ► 데이터를 물리적으로 복사
      ► 시간적,공간적으로 비효물적(예: 큰 배열) ► 복사순서에따라결과가달라질수있음
      void subl(int x, int y) { x = 2; y = 3; } ••• subl(b^ b);
    • 구현방법 2
      ► 참조경로전달및초깃값사용금지
      ► 실인수의주소값결정시기
        -> 대부분 호출 시 결정
      void subl(int x, int y) { x = 2; y = 3; } ••• index = 1; subl(index, lstfindex]);
  28. 값-결과 전달

    • 호출 시 실인수 값들 형식인수로 복사 복귀 시 형식인수 값들 실인수로 복사
    • 입출력 모드의 인수 전달 구현
    • 구현방법
      ► 물리적으로 값을 복사
      ► 복사에 의한 전달(pass-by-copy)
      ► 비효율을 비롯한 값전달과 결과 전달의 단점 발생
  1. 참조 전달
    • 실인수의 참조를 형식인수에 전달
      ► 실인수와 형식인수가 같은 변수
    • 입출력 모드의 인수 전달 구현
    • 공유에 의한 전달(pass-by-sharing)
    • 장점: 효율적
    • 단점: 별칭 문제 -> 한 대상을 다른 이름으로 지칭하여 발생하는 문제 -> 실 인수 충돌 -> 형식인수와 전역변수 충돌
  1. 이름 전달 : 형식 인수 사용시 실인수 이름이 사용됨, 늦은 바인딩으로 인한 유연함, 인수 참조 비효율적, 인수 전달 의미 난해

  2. 다형 서브프로그램: 여러 타입의 운세어 적용 가능한 범용 서브프로그램

  3. 다목적 서브프로그램: 다양한 목적에 적용 가능한 범용 서브프로그램

  4. 다형 서브프로그램 - C언어에서 매크로, C++ 템플릿, 자바 제네릭

  5. 젠슨의 기법: 이름 전달의 늦은 바인딩을 이용하여 범용 서브프로그램을 작성하는 기법

  6. 분리 컴파일이란 코드 사이의 인터페이스 정보를 이용하며 프로그램 일부를 다른 부분과 분리하여 컴파일 하는 방법

  7. 독립 컴파일은 인터페이스 정보 없이 프로그램 일부를 다른 부분과 분리하여 컴파일 하는 방법

서브 프로그램 구현

  1. 서브프로그램을 호출하는 작업 : 1) 호출자의 상태 저장 2) 인수 전달 3) 복귀 주소 저장 4) 피호출자로 분기
  2. 서브프로그램으로부터 복귀하는 작업: 1) 형식인수 값 복사 2) 반환값 전달 3) 상태복귀 4) 호출자로 복귀
  3. 활성 레코드: 수행중인 서브프로그램에서 데이터 부분이 저장되는 형태
    • 저장해야 할 정보의 틀
    • 틀 자체는 정적으로 결정
  4. 활성 레코드 인스턴스
    • 활성 레코드에 구체적인 값이 들어가 있는 형태
    • 저장되는 내용은 동적으로 결정
  5. Fortran 77의 활성 레코드 구현
    • 활성 레코드를 정적 할당: 코드 부분과 데이터 부분을 구별하지 않아도 됨
    • 재귀 호출을 허용하지 않음 -> 재귀 호출시 이전 활성 레코드를 덮어쓰게 되므로 이전 호출 정보를 잃어버리게 됨
  6. Algol의 활성 레코드 구현
    • 활성 레코드를 동적 할당 : 스택
    • 프레임 포인터 : 활성 레코드의 기준 지점
    • 변위: 프레임 포인터로부터 떨어진 정도
    • 정적 링크: 정적 부모의 프레임 포인터
    • 동적 링크: 호출자의 프레임 포인터
  7. C의 활성 레코드 구현 : 서브 프로그램 중첩 불가 -> 정적 링크 없음
  8. 동적 체인: 활성 레코드 스택 상에서 인접한 동적 링크들을 차례로 연결한 것 -> 리스트
  9. 정적 체인: 활성 레코드 스택 상에서 정적 링크들을 차례로 연결한 것 -> 트리 형태
  10. 지역 변위: 프레임 포인터에서 스택 동적 변수 위치 까지의 변위
  11. 동적 링크를 차례로 연결하면 한 줄로 연결된 체인이 나오는데 이를 동적 체인 또는 호출 체인이라고 함
  12. 동적 체인과 마찬가지로 정적 링크를 연결한 것을 정적 체인이라고 함
  13. 참조되는 비지역변수는 활성 레코드 스택 상에서 존재
  14. 올바른 활성 레코드만 찾으면 지역 변위로 변수 위치 찾음
  15. 정적 영역 규칙: 정적 체인 참고
  16. 동적 영역 규칙: 동적 체인 활용 -> 참조할 비지역변수를 컴파일 시간에 결정할 수 없다는 단점
  17. 반복적으로 정적 부모를 모두 포함한 것을 정적 조상이라고 부름
  18. 정적 조상의 활성 레코드는 정적 체인을 따라가면 모두 만날 수 있음
  19. 정적 깊이란 정적 영역의 중첩 깊이를 의미함. 다시 말해서 어떤 정적 영역의 정적 깊이는 자신을 감싸고 있는 정적 영역의 개수로 계산
  20. 체인 변위란 비지역변수를 참조하는 정적 영역의 정적 깊이와 비지역변수가 선언된 정적 영역의 정적 깊이의 차이
  21. 서브프로그램 호출 시 정적 링크는 정적 부모의 최근 활성 레코드를 가리키도록 설정 -> 방법 1: 동적 링크를 계속 거슬러 올라가벼 정적 부모 탐색 -> 활성 레코드 스택에 서브프로그램 이름 저장 -> 비효율적 2) 호출자와 피호출자의 정적 깊이 차이 이용
  22. 정적 체인 평가 -> 장점: 구현이 쉽고 공간 낭비가 적다 , 단점: 체인 변위가 큰 경우 비지역변수 참조 시간 부담, 비지역변수 참조 시간이 변수에 따라 달라 실시간 응용 프로그램 개발시 불리
  23. 동적 체인: 변수 참조 -> 비지역변수를 찾을 때 까지 동적 링크를 거슬러 올라감 , 호출 순서에 따라 참조하는 비지역변수가 달라질 수 있음, 활성 레코드에 변수 이름을 저장해야 함 -> 비효율적
  24. 디스플레이는 정적 체인 방법을 대체할 수 있는 방법으로서 수행중 참조할 수 있는 모든 정적 링크를 별도의 스택에 관리하는 구현 방법 -> 참조 환경의 모든 변수는 이 스택이 가리키는 활성 레코드 내에 조재하게 되는데 이 스택을 디스플레이라고 함
  25. 디스플레이 변위란 원하는 활성 레코드에 대한 포인터가 디스플레이 스택에서 몇 번째에 저장되어 있는지 나타내는 색인 값 -> 찾을 변수가 선언된 서브프로그램의 정적 깊이와 동일
  26. 현재 수행중인 서브프로그램의 정적 깊이가 p라면 디스플레이 내에는 p+1개의 항목이 존재
  27. 피호출자의 정적 깊이가 q라면 서브프로그램 호출시에 디스플레이 D의 q번째 항목 D[q]를 피호출자의 활성 레코드에 백업하고 새로 생성된 활성 레코드에 대한 포인터를 D[q]에 저장 -> 서브프로그램 복귀시에는 현재 활성 레코드 내에 백업되었던 D[q] 항목을 디스플레이의 해당 위치에 다시 복구
  28. 정적 체인과 디스플레이 비교
    - 정적체인 디스플레이
    지역변수참조 두방법모두 비슷한이용
    비지역변수참조 한단계 떨어진 경우, 디스플레이와 같은 비용 멀리 떨어져 있는 경우에 유리
    서브프로그램호출 정적깊이 차가 적으면 유리 정적깊이 차가 크면 유리
    서브프로그램 복귀 상수시간(약간 빠름) 상수시간(백업 복구 필요)
  1. 동적 체인을 따라가며 변수를 찾는 참조 방법을 깊은 참조라고 하고 참조되는 모든 변수를 관리하는ㅌ 자료 구조를 통해 변수를 참조하는 방법을 얕은 참조라고 한다.
  2. 얕은 참조 방법에서는 통상 비지역변수와 지역변수를 구별하지 않으며, 참조되는 모든 변수의 정보는 하나의 자료 구조 내에 존재
  3. 얕은 참조의 대표적인 예로 변수 스택 방법과 중앙 테이블 방법을 들 수 있음. 변수 스택은 변수 이름마다 별도의 스택을 두는 방법이며, 중앙 테이블은 모든 변수의 값을 하나의 표로 관리하는 방법
  4. 변수 스택을 관리하기 위해서는 각 서브프로그램마다 어떤 지역 변수를 선언하고 있는지 알아야 한다. 서브프로그램 호출 시 각 지역변수 스택의 최상위에 새로만들어진 활성 레코드 포인터를 넣는다. 서브프로그램 복귀시에는 해당 각 지역변수 스택의 최상위를 제거한다. 참조할 변수의 스택이 비어 있다면 이는 해당 변수를 동적 역역 규칙에 의해 사용할 수 없다는 듯
  5. 중앙 테이블은 각 변수에 대해 실제 사용할 수 있는지 여부와 실제 값을 하나의 표에 저장해 두는 방법, 변수의 활성 플래그가 이미 활성화되어 있으면 은닉 스택에 백업
  6. 과거 민감 서브프로그램이란 이전 호출 내용을 기억하는 서브프로그램을 의미. 서브프로그램이 종료되어도 상태 정보 일부가 기억됨 -> 전역 변수 이용: 정보 은닉이 보장되지 않음, 정적 지역변수 이용: 정보 은닉 보장
  7. 코루틴: 여러 개의 진입 위치를 스스로 관리하는 서브프로그램
    • 과거 중단 위치를 기억해 두었다가 다음에 재개됨 -> 활성 레코드가 삭제되지 않고 유지되어야 함
    • 서브프로그램 호출 관계가 대등 -> 대칭적 제어 모델
    • => 유사 병렬성 , 시뮬레이션 분야에 유용

문제

1. 서브프로그램이란?

  1. 독자적인 입력과 출력을 갖지 않는 프로그램 조각이다.
  2. 서브프로그램은 반환 값이 없을 때 프로시저라고 부른다.
  3. 서브프로그램 호출 시 피호출자의 수행이 완료되면 제어흐름이 호출자로 복귀한다.
  4. 서브프로그램은 독자적으로 실행될 수 있다.

정답: 3
해설: 서브프로그램 호출 시 호출된 서브프로그램이 수행되기 전에 호출자의 수행이 정지되며, 서브프로그램의 수행이 완료되면 제어흐름이 호출자로 복귀한다.

2. 서브프로그램의 특징 중 '하나의 입구'에 대한 설명은 무엇인가?

  1. 서브프로그램은 여러 개의 입구를 가질 수 있다.
  2. 서브프로그램으로 들어가는 입구는 하나뿐이다.
  3. 입구가 여러 개인 서브프로그램을 서브루틴이라고 한다.
  4. 서브프로그램의 입구는 프로그램 실행 중에 결정된다.

정답: 2
해설: 서브프로그램의 특징 중 하나는 서브프로그램으로 들어가는 입구가 하나라는 것이다.

3. 프로시저와 함수의 차이점은 무엇인가?

  1. 프로시저는 반환 값이 있고, 함수는 반환 값이 없다.
  2. 프로시저와 함수 사이에는 본질적인 차이가 없다.
  3. 함수는 반환 값이 있고, 프로시저는 반환 값이 없다.
  4. 프로시저는 독립적으로 실행될 수 있지만 함수는 그렇지 않다.

정답: 3
해설: 함수는 명시적인 반환값이 있는 서브프로그램이며, 프로시저는 명시적인 반환값이 없는 서브프로그램이다.

4. 서브프로그램의 매개변수 프로파일이란?

  1. 서브프로그램의 이름과 종류를 정의하는 부분이다.
  2. 서브프로그램의 매개변수의 개수, 순서, 타입을 의미한다.
  3. 서브프로그램이 어떻게 수행되어야 하는지를 기술하는 부분이다.
  4. 서브프로그램의 반환 타입을 포함하는 부분이다.

정답: 2
해설: 서브프로그램의 매개변수 프로파일은 서브프로그램의 매개변수의 개수, 순서, 타입을 의미하며, 이는 서브프로그램 호출 시 일치하는 서브프로그램을 찾는 데 사용된다.

5. 서브프로그램 호출 과정에 포함되지 않는 것은?

  1. 호출자의 상태 저장
  2. 인수 전달
  3. 복귀 주소 저장
  4. 프로그램 실행 속도 향상

정답: 4
해설: 서브프로그램 호출 과정에는 호출자의 상태 저장, 인수 전달, 복귀 주소 저장 등이 포함되지만 프로그램 실행 속도 향상은 서브프로그램 호출 과정과 직접적인 관련이 없다.

6. 값 전달 방식에 대한 설명으로 옳지 않은 것은?

  1. 실인수 값을 형식인수에 복사하여 전달한다.
  2. 대부분의 언어에서 채택되는 방식이다.
  3. 큰 배열과 같은 데이터를 전달할 때 비효율적일 수 있다.
  4. 참조경로를 전달하며 쓰기가 허용된다.

정답: 4
해설: 값 전달 방식에서는 실인수 값을 형식인수에 복사하여 전달하며, 이 과정에서 참조경로를 전달하거나 쓰기가 허용되지 않는다.

7. 서브프로그램의 활성 레코드에 포함되지 않는 것은?

  1. 형식인수 값
  2. 반환값
  3. 상태 복귀 정보
  4. 프로그램의 실행 시간

정답: 4
해설: 서브프로그램의 활성 레코드에는 형식인수 값, 반환값, 상태 복귀 정보 등이 포함되지만 프로그램의 실행 시간은 활성 레코드의 구성 요소가 아니다.

8. 정적 체인과 디스플레이 방법의 차이점은 무엇인가?

  1. 정적 체인은 공간 낭비가 적고 구현이 쉽다.
  2. 디스플레이는 비지역변수 참조 시간이 빠르다.
  3. 정적 체인은 서브프로그램 호출 시 비효율적이다.
  4. 디스플레이는 별도의 스택 관리가 필요하지 않다.

정답: 1, 2
해설: 정적 체인은 공간 낭비가 적고 구현이 쉽지만 비지역변수 참조 시간이 느릴 수 있다. 반면, 디스플레이 방법은 비지역변수 참조 시간이 빠르며 별도의 스택을 관리한다.

9. 참조 전달 방식의 단점은 무엇인가?

  1. 데이터 복사로 인한 비효율성
  2. 실인수와 형식인수가 같은 변수를 가리킨다.
  3. 별칭 문제로 인한 혼란
  4. 실인수의 참조를 복사하지 않는다.

정답: 3
해설: 참조 전달 방식의 단점은 별칭 문제로 인한 혼란이다. 이는 같은 대상을 다른 이름으로 지칭할 때 발생하는 문제이다.

10. 서브프로그램 정의에서 외부로부터 전달될 정보를 받기 위해 선언한 변수를 무엇이라고 하는가?

  1. 실인수
  2. 형식인수
  3. 반환값
  4. 변수 스택

정답: 2
해설: 서브프로그램 정의에서 외부로부터 전달될 정보를 받기 위해 선언한 변수를 형식인수라고 한다.

11. 서브프로그램에서 여러 출구가 가능한 이유는 무엇인가?

  1. 서브프로그램은 항상 한 개의 출구만 가진다.
  2. 서브프로그램은 예외 처리를 위해 여러 출구를 가질 수 있다.
  3. 서브프로그램은 실행 중 언제든지 종료할 수 있기 때문에 여러 출구가 필요하다.
  4. 서브프로그램은 반환값에 따라 다른 경로로 나갈 수 있다.

정답: 3
해설: 서브프로그램에서는 실행 중 언제든지 종료할 수 있으므로 여러 출구가 가능하다.

12. 서브프로그램 호출 과정에 포함되는 것은 무엇인가?

  1. 호출자의 실행 속도 최적화
  2. 반환값 전달
  3. 인수 처리 방식 결정
  4. 피호출자로 분기

정답: 4
해설: 서브프로그램 호출 과정에는 피호출자로 분기하는 과정이 포함된다.

13. 서브프로그램 복귀 과정에서 수행되지 않는 것은?

  1. 형식인수 값 복사
  2. 반환값 전달
  3. 상태 복귀
  4. 호출자의 속도 최적화

정답: 4
해설: 서브프로그램 복귀 과정에서 호출자의 속도 최적화는 수행되지 않는다.

14. 활성 레코드의 구성 요소는 무엇인가?

  1. 프로그램의 실행 시간
  2. 형식인수 값
  3. 반환값
  4. 상태 복귀 정보

정답: 2, 3, 4
해설: 활성 레코드는 형식인수 값, 반환값, 상태 복귀 정보를 포함한다.

15. 서브프로그램 호출 시 정적 링크의 역할은 무엇인가?

  1. 호출자의 정적 깊이 저장
  2. 피호출자의 최근 활성 레코드를 가리킴
  3. 호출자의 동적 링크를 백업
  4. 반환값을 전달

정답: 2
해설: 서브프로그램 호출 시 정적 링크는 피호출자의 최근 활성 레코드를 가리키는 역할을 한다.

16. 디스플레이 방법의 장점은 무엇인가?

  1. 구현이 쉽다.
  2. 비지역변수 참조 시간이 빠르다.
  3. 공간 낭비가 적다.
  4. 동적 체인을 사용하지 않는다.

정답: 2
해설: 디스플레이 방법은 비지역변수 참조 시간이 빠른 것이 장점이다.

17. 참조 전달 방식에서 발생할 수 있는 문제는 무엇인가?

  1. 데이터 복사의 비효율성
  2. 실인수와 형식인수가 다른 변수를 가리키게 됨
  3. 별칭 문제
  4. 실인수의 참조 복사 불가

정답: 3
해설: 참조 전달 방식에서는 별칭 문제가 발생할 수 있다.

18. 값-결과 전달 방식의 특징은 무엇인가?

  1. 호출 시 실인수 값을 형식인수로 복사
  2. 복귀 시 형식인수 값을 실인수로 복사
  3. 입력 모드의 인수 전달 구현
  4. 참조 전달 방식의 한 형태

정답: 1, 2
해설: 값-결과 전달 방식은 호출 시 실인수 값을 형식인수로 복사하고, 복귀 시 형식인수 값을 실인수로 복사한다.

19. 다형 서브프로그램의 예는 무엇인가?

  1. C언어의 매크로
  2. 자바의 인터페이스
  3. 파이썬의 람다 함수
  4. C++의 템플릿

정답: 1, 4
해설: 다형 서브프로그램의 예로는 C언어의 매크로와 C++의 템플릿이 있다.

20. 코루틴의 특징은 무엇인가?

  1. 과거 중단 위치를 기억해 둠
  2. 대칭적 제어 모델을 사용
  3. 서브프로그램 호출 관계가 대등
  4. 활성 레코드가 삭제되지 않고 유지됨

정답: 1, 2, 3, 4
해설: 코루틴은 과거 중단 위치를 기억하고, 대칭적 제어 모델을 사용하며, 서브프로그램 호출 관계가 대등하고, 활성 레코드가 삭제되지 않고 유지된다.

21. 서브프로그램에서 '하나의 입구, 여러 출구'의 개념은 어떤 의미인가?

  1. 서브프로그램은 여러 개의 입구를 가질 수 있다.
  2. 서브프로그램은 하나의 입구와 하나의 출구만 가진다.
  3. 서브프로그램은 하나의 입구와 여러 출구를 가질 수 있다.
  4. 서브프로그램의 출구는 오직 return문을 통해서만 이루어진다.

정답: 3
해설: 서브프로그램은 '하나의 입구, 여러 출구'의 개념을 가지고 있어, 하나의 입구와 여러 출구를 가질 수 있다.

22. 인수 전달 모델에서 '입력 모드'와 '출력 모드'의 차이점은 무엇인가?

  1. 입력 모드는 호출자의 실인수가 피호출자의 형식인수로 전달되고, 출력 모드는 그 반대이다.
  2. 입력 모드와 출력 모드는 본질적으로 같은 방식을 의미한다.
  3. 출력 모드는 형식인수의 변경이 호출자에게 전달되지 않는다.
  4. 입력 모드는 형식인수의 변경이 호출자에게 전달된다.

정답: 1
해설: 입력 모드는 호출자의 실인수가 피호출자의 형식인수로 전달되며, 출력 모드는 피호출자의 형식인수가 호출자의 실인수로 전달된다.

23. 서브프로그램 호출 시 '복귀 주소 저장'의 의미는 무엇인가?

  1. 서브프로그램이 종료된 후 실행을 재개할 메모리 주소를 저장한다.
  2. 복귀 주소는 서브프로그램의 시작 주소를 나타낸다.
  3. 복귀 주소는 서브프로그램 내부에서만 유효하다.
  4. 복귀 주소는 다른 서브프로그램을 호출할 때 사용된다.

정답: 1
해설: 서브프로그램 호출 시 '복귀 주소 저장'은 서브프로그램이 종료된 후 실행을 재개할 메모리 주소를 저장하는 것을 의미한다.

24. 활성 레코드의 역할은 무엇인가?

  1. 프로그램의 실행 시간을 계산한다.
  2. 서브프로그램의 데이터와 상태 정보를 저장한다.
  3. 서브프로그램의 실행 결과를 사용자에게 전달한다.
  4. 서브프로그램의 코드를 저장한다.

정답: 2
해설: 활성 레코드는 서브프로그램의 데이터와 상태 정보를 저장하는 역할을 한다.

25. 서브프로그램 내에서 '정적 링크'의 기능은 무엇인가?

  1. 현재 실행 중인 서브프로그램의 호출자를 가리킨다.
  2. 서브프로그램의 동적 깊이를 저장한다.
  3. 서브프로그램의 반환값을 전달한다.
  4. 정적 링크는 서브프로그램의 정적 부모의 최근 활성 레코드를 가리킨다.

정답: 4
해설: 서브프로그램 내에서 '정적 링크'는 해당 서브프로그램의 정적 부모의 최근 활성 레코드를 가리키는 역할을 한다.

26. '디스플레이' 기법의 주요 목적은 무엇인가?

  1. 서브프로그램의 코드를 더 빠르게 실행시킨다.
  2. 비지역변수 참조 시간을 줄인다.
  3. 메모리 사용을 최적화한다.
  4. 서브프로그램의 복귀 주소를 저장한다.

정답: 2
해설: '디스플레이' 기법의 주요 목적은 비지역변수 참조 시간을 줄이는 것이다.

27. '깊은 참조'와 '얕은 참조'의 차이점은 무엇인가?

  1. 깊은 참조는 변수의 값을 복사하여 전달하고, 얕은 참조는 참조 경로를 전달한다.
  2. 깊은 참조는 동적 체인을 따라가며 변수를 찾고, 얕은 참조는 자료 구조를 통해 변수를 찾는다.
  3. 얕은 참조는 메모리 사용을 줄이는 반면, 깊은 참조는 그렇지 않다.
  4. 깊은 참조는 효율적이지만, 얕은 참조는 구현이 복잡하다.

정답: 2
해설: '깊은 참조'는 동적 체인을 따라가며 변수를 찾는 방법이고, '얕은 참조'는 통상적인 자료 구조를 통해 변수를 참조하는 방법이다.

28. 중앙 테이블 방법에서 변수 관리의 특징은 무엇인가?

  1. 각 변수마다 별도의 스택을 사용한다.
  2. 모든 변수의 값을 하나의 표로 관리한다.
  3. 변수의 활성화 여부와 실제 값을 별도로 관리한다.
  4. 서브프로그램 호출 시 새로운 활성 레코드를 생성하지 않는다.

정답: 2
해설: 중앙 테이블 방법에서는 모든 변수의 값을 하나의 표로 관리하는 것이 특징이다.

29. 코루틴의 특징 중 하나가 아닌 것은?

  1. 과거 중단 위치를 기억한다.
  2. 대칭적 제어 모델을 사용한다.
  3. 서브프로그램 호출 관계가 대등하다.
  4. 서브프로그램 호출 시 항상 처음부터 시작한다.

정답: 4
해설: 코루틴은 과거 중단 위치를 기억하고 대칭적 제어 모델을 사용하며, 서브프로그램 호출 관계가 대등하지만, 항상 처음부터 시작하지는 않는다.

30. 참조 전달 방식에서의 '별칭 문제'란 무엇인가?

  1. 실인수의 값을 형식인수에 복사하는 과정에서 발생하는 문제이다.
  2. 실인수와 형식인수가 서로 다른 변수를 가리키게 되는 문제이다.
  3. 실인수와 형식인수가 동일한 메모리 위치를 참조하면서 발생하는 문제이다.
  4. 참조 전달 방식이 사용되지 않을 때 발생하는 문제이다.

정답: 3
해설: 참조 전달 방식에서는 실인수와 형식인수가 같은 메모리 위치를 참조하게 되며, 이로 인해 한 변수의 변경이 다른 변수에 영향을 미치는 '별칭 문제'가 발생한다. 이는 같은 메모리 주소를 참조하는 여러 이름(별칭)이 존재할 때 발생하는 문제로, 프로그래머가 예상치 못한 결과를 초래할 수 있다.

31. 이름 전달 방식에서의 '늦은 바인딩'이란 무엇인가?

  1. 실인수와 형식인수의 바인딩이 실행 시간에 결정된다.
  2. 실인수와 형식인수의 바인딩이 컴파일 시간에 결정된다.
  3. 실인수의 값이 호출 시점이 아니라 사용 시점에 결정된다.
  4. 형식인수의 이름이 실인수의 이름으로 대체된다.

정답: 3
해설: 이름 전달 방식에서 '늦은 바인딩'은 실인수의 값이 호출 시점이 아니라 사용 시점에 결정되는 것을 의미한다. 이는 실인수의 최종값이 형식인수에서 사용될 때까지 결정되지 않는 것을 말한다.

32. 분리 컴파일과 독립 컴파일의 차이점은 무엇인가?

  1. 분리 컴파일은 인터페이스 정보를 사용하지만, 독립 컴파일은 사용하지 않는다.
  2. 분리 컴파일은 전체 프로그램을 한 번에 컴파일한다.
  3. 독립 컴파일은 코드 사이의 인터페이스 정보를 사용한다.
  4. 분리 컴파일과 독립 컴파일 사이에는 본질적인 차이가 없다.

정답: 1
해설: 분리 컴파일은 코드 사이의 인터페이스 정보를 사용하여 프로그램의 일부를 다른 부분과 분리하여 컴파일하는 반면, 독립 컴파일은 인터페이스 정보 없이 각 부분을 분리하여 컴파일한다.

33. 서브프로그램 복귀 과정에서 '상태 복귀'란 무엇인가?

  1. 형식인수의 값을 실인수로 복사하는 과정이다.
  2. 호출된 서브프로그램의 실행 결과를 호출자에게 전달하는 과정이다.
  3. 호출자의 실행 상태를 이전 상태로 복원하는 과정이다.
  4. 서브프로그램의 복귀 주소를 호출자에게 전달하는 과정이다.

정답: 3
해설: 서브프로그램 복귀 과정에서 '상태 복귀'는 호출자의 실행 상태를 서브프로그램 호출 전의 상태로 복원하는 과정을 의미한다.

34. 활성 레코드의 '정적 링크'와 '동적 링크'의 차이점은 무엇인가?

  1. 정적 링크는 호출자의 상태 정보를 가리키고, 동적 링크는 피호출자의 상태 정보를 가리킨다.
  2. 정적 링크는 정적 스코프를, 동적 링크는 동적 스코프를 지원한다.
  3. 정적 링크는 컴파일 시간에 결정되고, 동적 링크는 실행 시간에 결정된다.
  4. 동적 링크는 호출 관계를, 정적 링크는 스코프 관계를 나타낸다.

정답: 4
해설: 활성 레코드의 '정적 링크'는 스코프 관계를 나타내며 정적 부모의 활성 레코드를 가리키는 반면, '동적 링크'는 호출 관계를 나타내며 호출자의 활성 레코드를 가리킨다.

35. 코루틴의 '대칭적 제어 모델'이란 무엇인가?

  1. 한 코루틴이 다른 코루틴을 호출하고 제어를 받는 관계이다.
  2. 코루틴 간의 호출 관계가 대등하며 서로를 호출할 수 있다.
  3. 코루틴은 항상 동일한 순서로 실행된다.
  4. 코루틴은 다른 코루틴의 종료를 기다리지 않고 독립적으로 실행된다.

정답: 2
해설: 코루틴의 '대칭적 제어 모델'은 코루틴 간의 호출 관계가 대등하며 서로를 호출할 수 있는 관계를 의미한다. 이 모델에서는 한 코루틴이 다른 코루틴을 호출하고, 그 코루틴이 다시 원래 코루틴을 호출하는 등의 상호 작용이 가능하다.

반응형