2018년 5급 공채 기술 2차 프로그래밍언어론
문제 4개 · 50점. 참고 답안·채점 기준은 앱에서 볼 수 있습니다.
제1문 (12점)
프로그래밍 언어에서는 변수 이름이 사용되는 영역을 정해주기 위하여 영역 규칙(scoping)을 사용한다. 이름의 영역을 정하는 시점에 따라 정적 영역 규칙(static scoping)과 동적 영역 규칙(dynamic scoping) 두 가지로 나눈다. 다음 물음에 답하시오. (총 12점)
- (1) 사용하는 영역 규칙에 따라 결과가 달라지는 예를 C와 비슷한(C-like) 구문의 의사코드(pseudo code)로 작성하고, 결과가 달라지는 이유를 설명하시오. (6점)
- (2) 두 가지 영역 규칙의 장단점을 설명하시오. (6점)
제2문 (14점)
C 언어에서 포인터(pointer) 타입의 변수 사용과 관련하여 발생하는 문제점들 중 하나는 수명(lifetime)이 지난 메모리에 접근하는 허상 참조(dangling reference)이다. 다음 물음에 답하시오. (총 14점)
- (1) 힙(heap) 기반의 동적 메모리 사용과 관련하여 허상 참조가 발생하는 상황을 간단한 C 프로그램의 예시를 들어 설명하시오. (3점)
- (2) 허상 참조가 심각한 문제인 이유를 설명하시오. (2점)
- (3) 허상 참조 문제를 해소하기 위해 C 프로그램 내에서 free 함수 호출을 모두 제거할 경우 발생하는 문제가 무엇인지 설명하시오. (2점)
- (4) 3)의 답에 대한 Java 언어의 대응 방법을 제시하고, 이 방법을 C 언어의 구현에 적용하기 어려운 이유를 설명하시오. (3점)
- (5) free 함수 호출을 제거해도 수명이 지난 메모리에 대한 포인터 참조는 발생할 수 있다. 간단한 C 프로그램의 예시를 들어 설명하시오. (4점)
제3문 (14점)
다음과 같이 변수의 타입이 실행 중에 바뀔 수 있는 프로그래밍 언어에 대하여 물음에 답하시오. (총 14점)
...
A= [[1,2,3], [3,4,5]];
A= “new buffer”;
A= 3;
...
A= [[1,2,3], [3,4,5]];
A= “new buffer”;
A= 3;
...
- (1) 위의 특징을 구현하기 위해서 실행 시간(run-time)에 필요한 추가적인 작업들을 제시하시오. (4점)
- (2) 1)의 구현과 관련하여, “A= [[1,2,3], [3,4,5]];” 문장을 실행한 후의 A값을 저장하는 방법을 제시하시오. (2점)
- (3) 사용자(프로그래머) 관점에서 위와 같은 언어의 장단점을 설명하시오. (4점)
- (4) 위 특징을 가진 언어를 세 가지 이상 제시하시오. (2점)
- (5) 위 특징을 가진 언어들이 주로 컴파일 방식이 아닌 인터프리터 방식으로 구현되는 이유를 설명하시오. (2점)
제4문 (10점)
다음 Java 프로그램에 대하여 물음에 답하시오. (총 10점)
import java.io.*;
public class Test {
Test() {
char[] str = new char[100];
readData(str);
System.out.println(str);
}
void readData(char[] str) {
FileReader reader = new FileReader("test.dat");
reader.read(str, 0, 100);
reader.close();
}
public static void main(String args[]) {
new Test();
}
}
public class Test {
Test() {
char[] str = new char[100];
readData(str);
System.out.println(str);
}
void readData(char[] str) {
FileReader reader = new FileReader("test.dat");
reader.read(str, 0, 100);
reader.close();
}
public static void main(String args[]) {
new Test();
}
}
- (1) 위 프로그램은 예외 처리를 하지 않아 컴파일 할 때 에러가 발생한다. 에러가 발생한 문장과 처리되지 않은 예외를 모두 제시하시오. (3점)
- (2) 1)의 답에 기초하여 예외를 처리할 수 있도록 다음 (가), (나)를 채워 프로그램을 완성하시오. (단, 예외의 종류에 따라 다른 메시지를 출력하여 예외를 처리한다) (7점)
import java.io.*;
public class Test {
Test() {
char[] str = new char[100];
(가)
}
void readData(char[] str)(나){
FileReader reader = new FileReader("test.dat");
reader.read(str, 0, 100);
reader.close();
}
public static void main(String args[]) {
new Test();
}
}(가) (나)