5급 공채 2차

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

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

제1문 (10점)

다음 프로그램에 대하여 질문에 답하시오. (총 10점)
C 프로그램Java 프로그램
#include <stdio.h>
typedef struct {
char model[10];
int price;
} Car;

int main() {
Car a ={"sedan", 1000};
Car b;
b = a;
b.price = 2000;
printf("%d\n", a.price);
printf("%d\n", b.price);
return 0;
}
public class Car {
String model;
int price;
public Car(String m, int p) {
model = m;
price = p;
}
public static void main(String[] args) {
Car a, b;
a = new Car("sedan", 1000);
b = a;
b.price = 2000;
System.out.println(a.price);
System.out.println(b.price);
}
}
  1. (1) 위의 프로그램을 실행했을 때 출력되는 결과를 각각 보이시오. (3점)
  2. (2) 1)의 실행 결과가 나오는 이유를 Car 객체가 할당되는 메모리 관점에서 설명하시오. (7점)

제2문 (10점)

다음 질문에 답하시오. (총 10점)
  1. (1) 다음 C++ 프로그램 코드는 반복 실행되는 상황에서 문제 발생의 가능성이 있다. 어떤 문제가 예상되는지 설명하시오. (5점)
    void foo(void) {
    int *x;
    for (int i = 0; i <= 500; i++) {
    x = new int;
    *x = i;
    }
    }
  2. (2) 힙의 회수를 위한 방법으로 프로그램의 명시적 회수 방식과 쓰레기 수집(garbage collection)에 의한 방식이 있다. 이들의 장단점을 비교하여 설명하시오. (5점)

제3문 (15점)

다음 C++ 프로그램에 대해 질문에 답하시오. (총 15점)
class CRadio {
int volume;
double channel;
protected:
virtual void changeVolume() = 0;
virtual void changeChannel() = 0;
public:
void turnOn();
void setVolume(int v) { volume = v };
void setChannel(double ch) { channel = ch };
int getVolume() { return volume; };
double getChannel() { return channel; };
};

void CRadio::turnOn() {
cout << "라디오 ON!" << endl;
setVolume(1);
setChannel(91.1);
}

int main() {
CFMRadio radio;
radio.turnOn();
radio.changeVolume();
radio.changeChannel();
cout << "현재 채널은 " << radio.getChannel() << ", 볼륨은 "
<< radio.getVolume();
}
  1. (1) 위의 코드에서 다음 함수 선언부의 의미를 설명하시오. (5점)
    virtual void changeVolume() = 0;
  2. (2) 다음과 같이 실행 결과가 출력되도록 추상클래스 CRadio를 상속한 CFMRadio 클래스를 작성하시오. (5점)
    <실행 결과>
    라디오 ON!
    현재 채널은 95.3, 볼륨은 91
  3. (3) 추상클래스의 정의를 쓰고 어떤 목적으로 사용되는지 설명하시오. (5점)

제4문 (15점)

다음 Java 프로그램에 대해 질문에 답하시오. (단, Exception 클래스를 상속한 MyException 클래스가 동일 패키지 안에 정의되어 있다고 가정한다) (총 15점)
public class ExceptionTest {
public static void main(String[] args) {
int age;
Scanner scan = new Scanner(System.in);
try {
age = scan.nextInt();
if (age < 6)
throw new MyException();
System.out.println("Age is " + age);
}
catch (Exception me) {
System.out.println("Very Infant!");
}
finally {
System.out.println("Very Good!");
}
}
}
  1. (1) 위 프로그램에서 5가 입력되었을 때와 7이 입력되었을 때의 실행 결과를 쓰시오. (5점)
  2. (2) 위 프로그램의 main 함수를 다음과 같이 바꾸었을 때 동일하게 동작하도록 추가될 readAge() 메소드를 작성하고, 5가 입력되었을 때 어떻게 실행되는지 설명하시오. (10점)
    public static void main(String[] args) {
    try {
    int age = readAge();
    System.out.println("Age is " + age);
    } catch (Exception me) {
    System.out.println("Very Infant!");
    } finally {
    System.out.println("Very Good!");
    }
    }