본 내용은는 2024년 1회 시험 기준 3개년 문제들을 바탕으로 준비된 정보들입니다.
✅ Java 언어
상속과 다형성 개념 숙지하기
✔️ [2023 3회] 1번
다음은 자바 코드이다. 올바른 출력 결과를 작성하시오.
문제 풀이
A b = new B( ); 는 다형성의 일종인 "업캐스팅"으로
부모 클래스 A의 참조 변수 b에 자식 클래스 B의 인스턴스가 할당됩니다.
이후 b.paint( )를 하면 아래의 코드로 이동합니다.
public void paint(){
super.draw();
System.out.print("C");
this.draw();
}
super.draw( ); 는 부모 클래스 A의 draw( ) 함수를 호출합니다.
"B"를 출력하고 나면 draw( ) 메서드를 또 호출하는데 여기서 draw 메서드는 B 클래스의 메서드 입니다.
왜 A 클래스의 draw 메서드가 아닐까요?
A b = new B(); 와 같이 객체를 생성하면 실제 생성된 객체는 B 클래스의 인스턴스 입니다.
그래서 A 클래스의 draw() 메소드 내부에서 호출되는 draw()는 B 클래스의 draw() 메소드인 것입니다.
이는 자바 동적 바인딩 규칙 때문입니다.
실제 호출되는 메소드는 참조 변수의 실제 타입에 따라 결정되기 때문입니다.
System.out.println("C"); 에서 "C"를 출력합니다.
this.draw(); 는 자기 자신 클래스의 draw() 메소드를 호출하는 것이므로 "D"를 출력합니다.
다시 main() 에서 b.draw(); 를 호출하면 B 클래스의 draw()가 호출되어 "D"를 출력합니다.
정답
BDCDD
✔️ [2023 1회] 17번
다음은 자바 코드이다. 올바른 출력 결과를 작성하시오.
문제 풀이
업캐스팅 하여 부모 클래스 Vehicle의 참조 변수 obj에 자식 클래스 Car의 인스턴스가 할당됩니다.
"Spark" 라는 이름의 Car 객체를 만들어 다음 코드에 getName( ) 함수를 호출합니다.
여기서 주의할 점은 Car 클래스의 getName은 매개변수만 다르게 Vehicle 클래스의 getName( ) 함수를
오버로드 하여 사용하고 있다는 점 입니다.
즉, 여기서 getName( ) 함수는 매개변수가 없으므로 Vehicle 클래스의 getName( ) 함수를 호출하는 것입니다.
정답
Vehicle name : Spark
✔️ [2023 1회] 20번
다음은 자바 코드이다. 올바른 출력 결과를 작성하시오.
문제 풀이
생성자 개념을 제대로 이해하고 있는지 묻는 문제입니다.
생성자는 자식 클래스의 생성자에서 명시적으로(super) 부모 클래스의 생성자가 호출되지 않으면
자동으로 부모 클래스의 default 생성자가 호출됩니다.
만약 부모 클래스에 default 생성자가 없다면 부모 클래스의 다른 생성자를 반드시 호출해야 합니다.
먼저 자식 클래스 Child 객체에서 부모 클래스 안의 getX( ) 함수를 호출하고 있습니다.
생성자는 자식 클래스 생성자의 첫 번째 명령어에서 생성자를 호출하지 않으므로
부모 클래스의 생성자 중 파라미터가 없는 생성자인 Parent( ) 함수를 호출합니다.
그 다음 자식 생성자를 호출합니다.
Parent와 Child의 생성자에서 this(500), this(5000) 을 호출하면,
매개변수 x를 가지고 있는 함수를 통해 각각의 클래스 안 변수 x에 값이 저장됩니다.
getX( ) 함수에서 x는 Parent 클래스의 x 값입니다.
정답
500
✔️ [2021 3회] 1번
다음은 자바 코드이다. 올바른 출력 결과를 작성하시오.
문제 풀이
싱글턴 패턴 지식이 필요한 문제입니다.
instance를 static으로 선언하고 get 메서드에서는 instance가 null인 경우에만 객체를 선언하도록 합니다.
즉, 프로그램에는 하나의 인스턴스만 생성하여 사용합니다.
정답
3
✔️ [2021 3회] 11번
다음은 자바 코드이다. 올바른 출력 결과를 작성하시오.
문제 풀이
AND, OR, XOR 연산에 대한 지식을 필요로 하는 문제입니다.
XOR(^) 연산은 두 비트 값이 서로 다를 때에만 1(참)을 출력하고 같으면 0(거짓)을 출력합니다.
연산 과정은 다음과 같습니다.
(a==2 | a==c) 는 (F | T) 이므로 결과는 참이 나옵니다.
!(c > d) 는 !(F) 이므로 결과는 참이 나옵니다.
(1==b ^ c!=d) 는 (F ^ T) 이므로 결과는 참이 나옵니다.
(T & T & T) 연산으로 최종 결과는 참이 됩니다.
a = b+c = 7 이 되어, (7==b ^ c!=a) 는 (F ^ T) 이므로 참이 나와 최종적으로 a 값을 출력합니다.
정답
7
✔️ [2021 2회] 16번
다음은 자바 코드이다. 밑줄 친 곳에 들어갈 키워드를 작성하시오.
문제 풀이
현재 Nerowiki 클래스에서 main 메서드가 있고, main 메서드에서 check 메서드를 호출하고 있습니다.
객체 생성없이 메서드를 사용하기 위해서는 static이라는 키워드를 사용해 메서드를 선언해야 합니다.
정답
static
✅ C 언어
주소와 포인터 개념 숙지하기
✔️ [2023 3회] 10번
다음은 C언어 코드이다. 출력 결과를 쓰시오.
문제풀이
K | O | R | E | A | NULL |
p[0] | p[1] | p[2] | p[3] | p[4] | p[5] |
*p | *(p+1) | *(p+2) | *(p+3) | *(p+4) | *(p+5) |
p는 &p[0]과 같습니다. 이는 다시 말해 p[0]번지에 있는 K부터 NULL 전의 값인 A까지 출력하는 것입니다.
p+1은 &p[1]과 같습니다. *p는 p[0]입니다. *(p+3)은 p[3]입니다. *p + 4는 p[0]에 4를 더한 값입니다.
정답
KOREA
OREA
K
E
O
✔️ [2023 2회] 5번
다음 C 프로그램에 홍길동, 김철수, 박영희 순서로 입력하였다. 프로그램의 출력 결과를 쓰시오.
문제 풀이
*p1 변수에 "홍길동"이 저장된 n[0] 주소값을 저장합니다.
n[0] | n[1] | n[2] | n[3] | n[4] | n[5] | n[6] | ... |
홍 | 길 | 동 | \0 |
*p2 변수에 "김철수"가 저장된 n[0] 주소값을 저장합니다.
n[0] | n[1] | n[2] | n[3] | n[4] | n[5] | n[6] | ... |
김 | 철 | 수 | \0 |
*p3 변수에 "박영희"가 저장된 n[0] 주소값을 저장합니다.
n[0] | n[1] | n[2] | n[3] | n[4] | n[5] | n[6] | ... |
박 | 영 | 희 | \0 |
최종적으로 n 배열에 저장된 값은 "박영희" 입니다.
*p1, *p2, *p3 모두 n[0] 주소 값을 저장하고 있으므로 동일한 값 "박영희"를 출력합니다.
정답
박영희
박영희
박영희
✔️ [2021 3회] 12번
다음은 C언어 코드이다. 출력 결과를 쓰시오.
문제 풀이
arr[0] | arr[1] | arr[2] |
a의 주소값 | b의 주소값 | c의 주소값 |
a | b | c |
12 | 24 | 36 |
*arr[1] 에서 arr[1]에는 b의 주소값이 저장되어 있습니다. *arr[1]은 해당 주소값이 가리키는 값 24입니다.
**arr에서 *arr은 arr[0]에 위치하게 됩니다. 따라서 **arr은 *arr[0]이므로 해당 값은 12가 됩니다.
정답
24+12+1 = 37
✅ Python
연산자 개념 숙지하기
✔️ [2021 2회] 3번
다음은 파이썬 코드이다. 출력 결과를 쓰시오.
문제 풀이
시프트 연산에 대한 이해가 필요한 문제입니다.
이진수에서 오른쪽으로 1비트 시프트하는 것은 각 비트 값을 오른쪽으로 한 칸 옮기는 것과 같습니다.
a = 100 을 오른쪽으로 시프트 (>>) 하게 되면 2로 나누어 지게 되는데,
이를 이진수 풀이로 설명하면 다음과 같습니다.
100의 이진수는 1100100 입니다.
1100100 >> 1 하게 되면 0110010 이 되는데, 이는 십진수로 50에 해당합니다.
따라서 100 >> 2 는 25가 되는 것을 알 수 있고, 결과 값은 26입니다.
정답
26