5급 공채 2차

2019년 5급 공채 기술 2차 프로그래밍언어론

문제 4개 · 50점. 참고 답안·채점 기준은 앱에서 볼 수 있습니다.

제1문 (10점)

다음 Java 프로그램에 대하여 물음에 답하시오. (총 10점)
class A {
private int a;
public A(int a) { this.a = a; }
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
}

public class Test {
public static void foo(int x, int[] y, A a1, A a2) {
x++;
y[0]++;
a1 = new A(7);
a2.setA(8);
}


public static void main(String[] args) {
int b = 10;
int[] array = {2, 3, 4};
A one = new A(5);
A two = new A(6);
foo(b, array, one, two); /* (A) */
System.out.printf("b=%d, array[0]=%d, one.a=%d, two.a=%d",
b, array[0], one.getA(), two.getA());
}
}
  1. (1) 위 프로그램의 출력 결과를 쓰시오. (4점)
  2. (2) 위 프로그램의 (A)부분에서 foo를 호출할 때 각 매개변수에 대해 사용된 매개변수 전달방법을 설명하고, 이에 근거하여 1)의 결과가 나오는 이유를 설명하시오. (6점)

제2문 (15점)

다음 문법에서 정의하는 비단말자 <statement>는 지정문과 if문, 복합문을 포함한다. 물음에 답하시오. (정의가 생략된 비단말자 <var>은 변수를, <expr>은 일반적인 표현식을 나타내며 이로 인한 모호함은 없다고 가정한다. 또한 사용된 단말자는 if, then, else, =, {, }, ; 이다) (총 15점)
<assignStatement> ::= <var> = <expr>;
<statements> ::= <statement> | <statements> <statement>
<compStatement> ::= { <statements> }
<ifStatement> ::= if <expr> then <statement>
| if <expr> then <statement> else <statement>
<statement> ::= <assignStatement> | <ifStatement>
| <compStatement>
  1. (1) 위 문법이 모호함(ambiguous)을 보이시오. (5점)
  2. (2) C 언어에서 이러한 모호함을 해결하는 방법을 설명하시오. (3점)
  3. (3) C 언어의 모호함 해결 방법을 반영하여 위 문법을 모호하지 않게 수정하시오. (7점)

제3문 (15점)

다음 C++ 코드에 대하여 물음에 답하시오. (총 15점)
#include <iostream>
using namespace std;

class Parent {
public:
void func() { cout << "Parent" << endl; }
};

class Derived : public Parent {
public:
void func() { cout << "Derived" << endl; }
};

int main() {
Derived *dptr = new Derived();
Parent *pptr = dptr;
pptr->func();
dptr->func();
return 0;
}
  1. (1) 위 코드의 출력 결과를 제시하고, 그 이유를 설명하시오. (5점)
  2. (2) 위 코드를 동적바인딩이 되도록 수정하고, 출력 결과가 어떻게 바뀌는지 설명하시오. (5점)
  3. (3) C++에서 동적바인딩의 동작과정을 내부 자료구조를 이용해 설명하시오. (5점)

제4문 (10점)

다음 C++ 클래스에 대하여 물음에 답하시오. (총 10점)
class TestClass {
int size;
int *element;
public:
TestClass(int size) {
this->size =size;
element = new int [size];
for(int i=0; i<size; i++) element[i] = 0;
}
};
  1. (1) 적절한 소멸자를 작성하시오. (4점)
  2. (2) TestClass에 깊은 복사를 실행하는 복사생성자 코드를 작성하고, 이에 대하여 설명하시오. (6점)