Skip to Content
독학사독학사 3단계프로그래밍언어론28. 독학사 프로그래밍언어론 기출 분석 2 (코드·모델 중심)

재구성 출제 고지: 이 편은 국가평생교육진흥원 독학학위제 컴퓨터과학 전공 3단계 「프로그래밍언어론」의 최신 출제기준(평가영역) 중 식·할당·단락 평가, 하위프로그램 구현, 병행성, 예외 처리, 함수형·논리형 언어 영역을 근거로 새로 구성한 코드·모델 중심 재구성 문항 24개입니다. 실제 특정 회차의 기출 문항을 그대로 옮기거나 암기해 재현한 것이 아니며, 1215·1923편에서 다룬 개념을 실행 결과 추적 형태로 재구성했습니다. 실제 응시 시 문항 수·배점·시험 시간은 그해 시행 공고를 반드시 확인하시기 바랍니다. 아래 의사코드는 특정 프로그래밍언어의 실제 문법이 아니라 개념 비교를 위한 교육용 표기입니다.

풀이 전략과 이 편의 구성

코드·모델형 문제는 답을 외워서 맞히는 것이 불가능합니다. 실행 순서를 한 줄씩 손으로 따라가며 변수·스택·메시지의 상태를 직접 적어 보는 습관이 유일한 대비법입니다. 아래 표는 24개 문항이 다루는 영역과, 풀이 시 반드시 확인해야 할 확인 포인트를 정리한 것입니다.

문항 번호출제기준 영역관련 편풀이 시 확인 포인트
1–2연산자 우선순위·결합법칙12편우선순위표를 암기가 아니라 유도로 확인
3–4l-value vs r-value, 할당 모델12편대입문 왼쪽·오른쪽의 역할 구분
5–7단락 평가(short-circuit)와 부작용12편어느 피연산자가 실제로 평가되는지
8–9활성화 레코드·재귀 스택 추적15편스택에 몇 개의 레코드가 동시에 있는지
10–11세마포어·모니터 시나리오19편P·V 순서, 조건변수 대기·신호 시점
12메시지 전달 동기화19편메시지 전송·수신 순서
13–14예외 처리(try-catch-finally)·전파20편finally 실행 여부, 어느 핸들러가 잡는지
15이벤트 핸들링20편콜백이 언제 호출되는지
16–17람다·순수 함수·고차 함수22편부작용 유무, 함수를 값으로 전달하는지
18–19불변성(immutability)22편재할당 시도 시 어떤 일이 일어나는지
20–21Prolog 사실·규칙·단일화·백트래킹23편질의가 어떤 순서로 해를 찾는지
22–23컴파일러·인터프리터의 오류 발견 시점21편정적 오류 vs 런타임 오류
24재귀 vs 반복 종합15·22편스택 사용량과 실행 방식 비교

문제 1

문제 14지선다
식 2 + 3 * 4에서 곱셈 연산자가 덧셈 연산자보다 우선순위가 높은 일반적인 언어 규칙을 적용할 때 이 식의 값은?

문제 2

문제 24지선다
뺄셈 연산자가 왼쪽 결합(left-associative)일 때, 식 10 - 3 - 2의 값은?

문제 3

다음 대입문에서 각 위치의 역할을 생각해 보자.

x = y + 1
문제 34지선다
이 대입문에서 l-value와 r-value에 대한 설명으로 가장 적절한 것은?

문제 4

문제 44지선다
일반적인 대입문에서 대입 연산자의 왼쪽에 y + 1처럼 계산된 값(r-value)만 놓았을 때 어떤 일이 일어나는가?

문제 5

increment()는 호출될 때마다 전역 변수 count를 1씩 늘리고 true를 반환하는 하위프로그램이라고 하자.

전역 변수 count = 0 function increment(): count = count + 1 true를 반환한다 조건 = false and increment() // 단락 평가를 지원하는 언어
문제 54지선다
이 언어가 단락 평가(short-circuit evaluation)를 지원하는 and 연산자를 쓸 때, 위 문장을 실행한 뒤 count의 값은?

문제 6

문제 5와 동일한 코드이지만, 이번에는 이 언어의 and 연산자가 단락 평가를 지원하지 않고 항상 양쪽 피연산자를 모두 평가한다고 가정한다.

문제 64지선다
단락 평가를 지원하지 않는 and 연산자를 쓸 때, 위 문장을 실행한 뒤 count의 값은?

문제 7

문제 74지선다
문제 5와 문제 6의 결과 차이가 실무에서 중요한 이유로 가장 적절한 것은?

문제 8

다음 재귀 함수는 n부터 1까지의 합을 구한다.

function sumTo(n): 만약 n <= 0이면 0을 반환한다 아니면 n + sumTo(n - 1)을 반환한다 sumTo(3)을 호출한다
문제 84지선다
sumTo(3) 호출 과정을 활성화 레코드가 쌓이는 순서대로 나열했을 때, sumTo(0)의 활성화 레코드가 반환값 0을 갖고 제거된 직후 상태에 대한 설명으로 가장 적절한 것은?

문제 9

문제 94지선다
문제 8의 sumTo(3) 호출이 최종적으로 반환하는 값과, 그 값이 계산되는 순서로 가장 적절한 것은?

문제 10

두 프로세스 A, B가 공유 세마포어 S(초기값 1)를 이용해 임계 구역에 접근한다고 하자.

프로세스 A: P(S) 임계 구역 실행 V(S) 프로세스 B: P(S) 임계 구역 실행 V(S)
문제 104지선다
A가 먼저 P(S)를 실행해 임계 구역에 진입한 상태에서 B가 P(S)를 시도하면 어떤 일이 일어나는가?

문제 11

모니터 안에 조건 변수(condition variable) notFull이 있고, 생산자 프로세스가 버퍼가 가득 찬 경우 notFull.wait()으로 대기하고, 소비자 프로세스가 버퍼에서 항목을 꺼낸 뒤 notFull.signal()로 대기 중인 생산자를 깨운다고 하자.

문제 114지선다
생산자가 notFull.wait()을 호출했을 때 일반적으로 일어나는 일로 가장 적절한 것은?

문제 12

프로세스 P가 프로세스 Q에게 메시지를 보내고 응답을 기다리는 동기(synchronous) 메시지 전달 방식이 있다고 하자.

프로세스 P: Q에게 요청 메시지를 보낸다 Q로부터 응답 메시지를 받을 때까지 기다린다 응답을 처리한다 프로세스 Q: P로부터 요청 메시지를 받을 때까지 기다린다 요청을 처리한다 P에게 응답 메시지를 보낸다
문제 124지선다
이 동기 메시지 전달 방식에서 P가 요청 메시지를 보낸 직후의 상태로 가장 적절한 것은?

문제 13

다음과 같은 예외 처리 구조가 있다고 하자.

try: 1을 출력한다 0으로 나누기를 시도해 예외를 발생시킨다 2를 출력한다 // 예외 때문에 이 줄은 실행되지 않는다 catch (DivideByZeroException e): 3을 출력한다 finally: 4를 출력한다 5를 출력한다
문제 134지선다
이 코드를 실행했을 때 출력되는 순서로 가장 적절한 것은?

문제 14

다음은 세 겹으로 중첩된 하위프로그램 호출에서 예외가 발생하는 상황이다.

procedure outer(): try: call middle() catch (MyException e): A를 출력한다 procedure middle(): call inner() // middle에는 이 예외를 처리하는 catch가 없다 procedure inner(): MyException을 발생시킨다
문제 144지선다
inner에서 발생한 예외가 최종적으로 처리되는 위치와 출력 결과로 가장 적절한 것은?

문제 15

버튼 클릭 시 실행될 콜백 함수를 등록해 두는 이벤트 기반 프로그램이 있다고 하자.

버튼.onClick(콜백함수)로 등록해 둔다 (프로그램은 여기서 사용자의 입력을 기다린다) ... 시간이 흐른 뒤 사용자가 버튼을 클릭한다 ...
문제 154지선다
이벤트 기반 프로그래밍에서 콜백함수가 실제로 실행되는 시점으로 가장 적절한 것은?

문제 16

문제 164지선다
다음 두 함수 중 순수 함수(pure function)로 볼 수 있는 것은? (double은 입력값을 2배로 만들어 반환하고, addAndLog는 입력값에 1을 더해 반환하면서 동시에 전역 로그 목록에 실행 기록을 추가한다)

문제 17

고차 함수(higher-order function)의 대표적인 예로 리스트의 각 원소에 함수를 적용하는 map 연산이 있다. 리스트 [1, 2, 3]에 double 함수를 map으로 적용한다고 하자.

문제 174지선다
map(double, [1, 2, 3])의 결과로 가장 적절한 것은? (double은 입력을 2배로 만들어 반환하는 순수 함수이다)

문제 18

불변(immutable) 값을 사용하는 함수형 스타일의 언어에서 다음과 같은 코드를 작성했다고 하자.

x = 5 // 한 번 값이 정해지면 다시 바꿀 수 없는 불변 바인딩 x = x + 1 // 같은 이름 x에 다시 대입을 시도
문제 184지선다
완전히 불변(immutable) 바인딩만 허용하는 언어에서 두 번째 줄과 같은 재대입을 시도하면 일반적으로 어떤 일이 일어나는가?

문제 19

문제 194지선다
불변성(immutability)이 병행성(concurrency) 프로그래밍에서 갖는 장점으로 가장 적절한 것은?

문제 20

다음과 같은 Prolog 스타일의 사실과 규칙이 있다고 하자.

사실: 부모(철수, 영희). 사실: 부모(영희, 민수). 규칙: 조부모(X, Y) :- 부모(X, Z), 부모(Z, Y). 질의: ?- 조부모(철수, 민수).
문제 204지선다
이 질의 조부모(철수, 민수)에 대한 추론 과정과 결과로 가장 적절한 것은?

문제 21

이번에는 사실이 다음과 같이 추가되어 영희가 두 사람의 부모인 경우를 생각한다.

사실: 부모(철수, 영희). 사실: 부모(영희, 민수). 사실: 부모(영희, 지수). 규칙: 조부모(X, Y) :- 부모(X, Z), 부모(Z, Y). 질의: ?- 조부모(철수, W).
문제 214지선다
변수 W를 포함한 질의 조부모(철수, W)를 실행하면, Prolog의 백트래킹(backtracking)을 통해 얻을 수 있는 결과로 가장 적절한 것은?

문제 22

문제 224지선다
정적 타입 언어에서 형이 맞지 않는 연산(예: 문자열과 정수의 부적절한 덧셈)을 컴파일러가 처리하는 방식과, 동적 타입 언어에서 같은 상황을 인터프리터가 처리하는 방식을 비교한 것으로 가장 적절한 것은?

문제 23

문제 234지선다
같은 문제(예: n까지의 합 구하기)를 재귀로 구현했을 때와 반복문(for나 while)으로 구현했을 때의 일반적인 차이로 가장 적절한 것은?

문제 24

문제 244지선다
이 편에서 다룬 식·할당·단락 평가, 활성화 레코드, 병행성, 예외 처리, 함수형·논리형 언어를 종합했을 때 옳지 않은 설명은?

참고 자료

Last updated on