※ 모든 문제는 시험 응시자의 기억으로 복원 된 문제임을 알립니다. 따라서 문제의 지문과 답이 상이한 경우가 발생 할 수 있습니다. (서술형의 경우 정확하게 맞지 않을 수 있습니다.)
※ 또한, 모든 문제의 기본 풀이는 수제비2023 책을 기반으로 작성하였습니다. 오타가 있을 경우, 답이 틀렸을 경우 댓글 부탁드립니다.
※ 수제비 카페 바로가기 - https://cafe.naver.com/soojebi
1. 아래 자바 코드에서 출력되는 값을 작성하시오.
class Static{
public int a = 20;
static int b = 0;
}
public class Main{
public static void main(String[] args) {
int a;
a = 10;
Static.b = a;
Static st = new Static();
System.out.println(Static.b++);
System.out.println(st.b);
System.out.println(a);
System.out.print(st.a);
}
}
- 10
- 11
- 10
- 20
- static클래스에는 일반 변수와 스태틱 변수가 있다.
- 스태틱 변수는 쉽게말하면 전역 변수 취급을 받는다. 또한 정적 변수라고 불린다.
- 정적변수는 첫번째 print문처럼 클래스 자체에서 접근 가능하다.
- 이후, 첫번째 print문에서 후위증가 연산자를 사용하고있다.
- 후위증가는 보통 변수 뒤에 ++ , --를 붙여 사용하고, 뜻은 이 줄이 끝나는 순간 증감을 한다는 뜻이다.
- 따라서 첫 출력에서는 10이지만, 두번째 출력에서는 11이 출력된다.
- 세번째, 네번째 출력은 세번째 출력은 main의 a에 접근하여 10이 출력된다.
- 네번째 출력은 static클래스 안의 a에 접근하기 때문에 20이 출력되어야 한다.
2. 다음 C언어의 출력값을 작성하시오.
#include <stdio.h>
int main(){
char a[] = "Art";
char* p = NULL;
p = a;
printf("%s\n", a);
printf("%c\n", *p);
printf("%c\n", *a);
printf("%s\n", p);
for(int i = 0; a[i] != '\0'; i++)
printf("%c", a[i]);
}
- Art
- A
- A
- Art
- Art
- c에서 배열은 포인터라는 개념이 있어야 한다.
- 배열은 곧 포인터이므로, *연산또한 가능하다.
- 따라서 *p와 *a는 위 코드에서 같은 연산이 된다.
3. 다음 C언어의 출력값을 작성하시오.
#include <stdio.h>
int main(){
char* a = "qwer";
char* b = "qwtety";
for(int i = 0; a[i] != '\0' ; i++){
for(int j = 0; b[j] != '\0'; j++){
if(a[i] == b[j]) printf("%c", a[i]);
}
}
}
- qwe
- 반복문에서 모든 요소에 접근하면서 두 문자열 qwer과 qwtety를 비교하여, 같은 문자일때 출력을 하고 있다.
- 여기서 주의할 점은, 반복문이 모든 요소에 하나하나 차례로 접근하고 있다는 점이다.
- 따라서 qwer로 햇갈리면 안된다. 차근차근 풀어나가는것이 중요함.
4. 다음 괄호안에 들어가는 용어의 Full Name 또는 약자를 작성하시오.
- ( )은/는 비동기적인 웹 애플리케이션의 제작을 위해 JavaScript와 XML을 이용한 비동기적 정보 교환 기법이다.
- ( )은/는 필요한 데이터만을 웹서버에 요청해서 받은 후 클라이언트에서 데이터에 대한 처리를 할 수 있다.
- 보통 SOAP이나 XML 기반의 웹 서비스 프로토콜이 사용되며, 웹 서버의 응답을 처리하기 위해 클라이언트 쪽에서는 자바스크립트를 쓴다.
- ( )은/는 Google Map과 Google pages에서 사용한 기술에 기반하여 제작되었다.
- AJAX(Asynchronous Javascript And XML)
- AJAX는 자바 스크립트를 사용하여 웹 서버와 클라이언트 간 비동기적으로 XML 데이터를 교환하고 조작하기 위한 웹 기술이다.
- 하이퍼텍스트 표기 언어마능로는 어려운 다양한 작업을 웹 페이지에서 구현해서 이용자가 웹 페이지와 자유롭게 상호 작용 할 수 있도록 구현하는 기법이다.
AJAX
5-9
5. 아래 내용을 확인하여 괄호 안에 용어를 표안에 알맞는 값을 고르시오.
- ( ) - 회선교환 방식과 데이터그램 방식의 장점을 결합한 통신 기술이다.
- 처음 패킷으로 최적의 경로를 고정하고 경로가 고정되면 그 다음은 패킷으로 나누어 고속으로 전송할 수 있다.
- 통신기술에는 ATM이 있으며, 정해진 시간 안이나 다량의 데이터를 연속으로 보낼 때 적합하다.
- ( ) - 패킷교환 방식으로 동작하면서 IP 주소를 사용하는 인터넷을 의미한다.
- 각 전송패킷을 미리 정해진 경로 없이 독립적으로 처리하여 교환하는 방식이다
- 특정 교환기의 고장 시 모든 패킷을 잃어버리는 가상회선과 달리, 그 경로를 피해서 전송할 수 있으므로 더욱 신뢰가 가능하다.
- 짧은 메시지의 패킷들을 전송할 때 효과적이고 재정렬 기능이 필요하다.
- 가상회선
- 데이터그램
- 패킷 교환 방식의 종류에는 데이터그램 방식과 가상회선 방식이 있다.
구분 | 데이터그램 | 가상회선 |
개념 | 연결 경로를 확립하지 않고 각각의 패킷을 순서에 무관하게 독립적으로 전송하는 방식 | 패킷이 전송되기 전에 송/수신 스테이션 간의 논리적인 통신 경로를 미리 설정하는 방식 |
동작 원리 및 특징 |
각각의 패킷을 독립적으로 취급하는 방식으로, 앞에 보낸 메시지나 앞으로 보낼 메시지의 어떠한 결과와도 관계가 없는 단일 패킷 단위로 전송하고, 수신하는 방식 헤더를 붙여서 개별적으로 전달하는 비연결형 교환 방식 |
많은 이용자들이 상호 통신을 할 때 하나의 통신 설비를 공유하여 여러개의 논리적인 채널을 확정한 후 통신을 할 수 있는 방식 목적지 호스트와 미리 연결 후 통신하는 연결형 교환 방식 |
패킷 교환방식의 종류
11-71
6. 아래 내용을 확인하여 알맞는 답을 작성하시오.
- 2 계층(데이터링크 계층)에서 구현되는 터널링 기술 중 하나
- L2F와 PPTP가 결합된 프로토콜로 VPN과 인터넷 서비스 제공자(ISP)가 이용
- IPsec을 함께 사용하면 PPTP보다 훨씬 안전하지만 보안보다 익명화에 더 적합
- L2TP
- L2TP는 Layer 2 Tunneling Protocol(계층 2 터널링 프로토콜)의 약자입니다. L2TP는 L2F(계층 2 포워딩 프로토콜)와 PPTP(지점간 터널링 프로토콜)가 결합된 프로토콜로 1999년에 처음 제안되었습니다. L2TP는 자체적으로 강력한 암호화 또는 인증을 제공하지 않기 때문에 IPsec이라는 또다른 프로토콜이 L2TP와 함께 사용되는 경우가 많습니다. (출처 https://www.expressvpn.com/kr/what-is-vpn/protocols/l2tp)
- 책에서는 못찾았음...
7. 아래 내용에서 괄호안에 알맞는 용어를 작성하시오.
- ( ) 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다.
- ( ) 보안 접속을 통한 rsh, rcp, rlogin, rexec, telnet, ftp 등을 제공하며, IP spoofing (IP스푸핑, 아이피 위/변조 기법중 하나)을 방지하기 위한 기능을 제공한다.
- ( ) 기본적으로 포트는 22번이다.
- SSH
- SSH는 Telnet보다 강력한 보안을 제공하는 원격 접속 프로토콜이다.
- 서로 연결되어 있는 컴퓨터 간 원격 명령 실행이나 쉘 서비스등을 수행한다.
- 키를 통한 인증은 클아이언트의 공개키를 서버에 등록해야 하고, 전송되는 데이터는 암호화된다.
- SSH는 인증, 암호화, 압축, 무결성을 제공하고 기본 네트워크 포트는 22번을 사용한다.
- 추가로 응용계층 프로토콜은 포트번호가 있고, 포트번호를 알고 있으면 문제 풀기 용이하다.
HTTP | 80 |
FTP | 21 |
SMTP | 25 |
POP3 | 110 |
IMAP | 143 |
Telnet | 23 |
SSH | 22 |
SNMP | 161 |
응용계층 - 응용계층의 프로토콜
11-68
8. 아래 설명에 대한 알맞는 답을 작성하시오.
- ( 1 ) - 감염된 컴퓨터 시스템에서 스스로 복제해 다른 컴퓨터로 복사본을 확산시킬 수 있는 악성 프로그램이다.
- 독자적으로 실행되며 다른 실행 프로그램이 필요하지 않으며, 파일 전송 기능을 착취하도록 설계된다.
- 자가 복제 및 네트워크를 통한 전파도 가능하다.
- ( 2 ) - 정상적인 프로그램으로 가장해 사용자가 직접 컴퓨터에 설치하도록 위장하며, 백도어를 만들어 공격자가 침입할 수 있도록 만들거나 시스템을 파괴한다.
- 정상적인 프로그램으로 위장하여 시작부터 끝까지 램에 상주하며, 시스템 내부 정보를 공격자의 컴퓨터로 빼돌리는 프로그램이다.
- 좀비PC처럼 내부정보 유출뿐만 아니라 컨트롤까지 가능한 종류가 있고, 단순히 내부 데이터만 유출할 수 있는 타입의 트로이 목마가 있다.
- 감염된 후에 스스로를 복제하는 능력은 없다.
- ( 3 ) - 대상(정상파일)을 감염시키는 형태로 실행되며, 감염시킬 대상이 존재하지 않을 때에는 실행되지 않으며 다른정상파일로의 자기 복제 기능이 있다.
- 컴퓨터 시스템에 침입해 프로그램에 기생하며 시스템을 변경하거나 사용할 수 없도록 만드는 악성코드이다.
- 네트워크를 통해 전파되지 않으며 방식 및 위치에 따라 여러형태로 나뉜다.
- 웜
- 트로이목마
- 바이러스
- 웜은 스스로를 복제하여 네트워크 등의 연결을 통하여 전파하는 악성 소프트웨어 컴퓨터 프로그램이다. 컴퓨터 바이러스와 비슷하지만, 바이러스가 다른 실행 프로그램에 기생하여 실행되는데 반해 웜은 독자적으로 실행된다.
- 트로이목마는 악성 루틴이 숨어있는 프로그램으로 겉보기에는 정상적인 프로그램이지만 실행하면 악성코드를 실행하는 프로그램이다.
보안 관련 용어
9-15, 9-12 바이러스는 찾지 못함.
9. 다음 아래 코드에서 이진수를 십진수로 변환하는 코드에 대해 괄호 (a) (b)의 적합한 답을 작성하시오.
#include <stdio.h>
int main() {
int input = 101110;
int di = 1;
int sum = 0;
while (1) {
if (input == 0) break
else {
sum = sum + (input (a)(b)) * di;
di = di * 2;
input = input / 10;
}
}
printf("%d", sum);
return 0;
}
- a : % b: 10
- or
- a : & b : 1
10. 다음 보안 관련 설명으로 괄호안에 알맞는 용어를 작성하시오.
- ( )은/는 TCP/IP에서 IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜이다.
- ( ) 프로토콜은 보통 다른 호스트나 게이트웨이 와 연결된 네트웍에 문제가 있는지 확인하기 위한 목적으로 주로 사용된다.
- ( ) 을/를 이용한 공격에는 ( ) Flooding가 있는데 ping 명령어를 통한 ( ) 패킷을 연속적으로 계속 보내어 서버의 요청에 응답으로 인한 다른작업을 하지 못하도록 하는 공격이다.
- ICMP
- ICMP는 IP의 동작 과정에서 전송 오류가 발생하는 경우 오류 정보를 전송하는 목적으로 사용하는 프로토콜이다.
- ICMP 프로토콜을 사용하여 ping 유틸리티의 구현을 통해 오류가 발생했음을 알리는 기능을 수행한다.
- UDP/ICMP Flooding공격은 DDos공격의 일종으로, 대역폭 소진 공격이다.
11. 다음은 디자인 패턴에 관한 설명이다. 설명에 내용에 알맞는 답을 고르시오.
- 다른 무언가와 이어지는 인터페이스 역할을 하는 클래스를 의미한다.
- 실제 객체를 호출하면 행위를 중간에 가로채서 다른 동작을 수행하는 객체로 변경한다.
- 객체를 정교하게 제어해야 하거나 객체 참조가 필요한 경우 사용한다.
- 분리된 객체를 위임함으로써 대리 작업을 중간 단계에 삽입할 수도 있으며 분리된 객체를 동적으로 연결함으로써 객체의 실행 시점을 관리할 수도 있다.
- Proxy
- Proxy패턴은 구조패턴 중 하나로, 실체 객체에 대한 대리 객체로 실체 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 만들며, 이 점을 이용해서 미리 할당하지 않아도 상관없는 것들을 실제 이용할 때 할당하게 하여 메모리 동룡을 아낄 수 있으며, 실체 객체를 드러나지 않게 하여 정보은닉의 역할도 수행하는 디자인 패턴이다.
- 특정 객체로의 접근을 제어하기 위한 용도로 사용한다.
- 생성
Builder
조립Prototype
원형 복사Factory Method
상위 클래스에서 객체 생성
하위 클래스에서 인스턴스 생성Abstract Factory
구체적인 클래스 의존XSingletone
객체 하나 생성Bridge
연결Decorator
장식추가Facade
단순한 인터페이스Flyeight
클래스 경량화Proxy
대리객체,Composite
부분 - 전채Adepter
중간 역할Observer
상태 변경 -> 다른 객체 연락Mediator
중재자Visitor
클래스를 돌아다님Strategy
캡슐화 된 클래스 필요시 교환
디자인 패턴
1-29
2. 다음은 데이터베이스에 관련된 내용이다. 각 괄호안에 알맞는 답을 작성하시오.
- ( 1 ) - 셀 수 있는 수량의 순서 있는 열거이다.
- 어떤 요소의 집합, 혹은 테이블에서의 행을 가리키지만 일반적인 집합과는 달리 중복이 허용될 수 있다.
- 리스트와 동일하게 여러 객체를 모아서 담으며, 숫자, 문자, 객체, 배열, 튜플 안의 튜플 전부 가능하다.
- ( 2 ) - 어느 한 시점에 릴레이션의 내용(상태), 즉 저장된 데이터 전체를 의미한다.
- 단순히 릴레이션 또는 릴레이션 외연(Relation Extension)라고도 한다.
- ( 3 ) - 특정 데이터 집합의 유니크(Unique)한 값의 개수이다.
- 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표이다.
- 튜플
- 릴레이션
- 카디널리티
- 튜플은 릴레이션 행에 해당하는 요소이다.
- 릴레이션은 테이블을 말한다.
- 카디널리티는 튜플(행)의 수를 나타낸다.
13. [학생] 테이블에서 학생 이름이 '민수'인 튜플을 삭제하는 쿼리를 작성하시오.
순번 | 학년 | 이름 |
1 | 1 | 종현 |
2 | 2 | 민수 |
3 | 2 | 수연 |
4 | 3 | 수지 |
- 컬럼의 값이 문자열일 경우 작은 따움표 (' ')를 표시하시오.
- SQL 마지막에 세미콜론(;)은 표기하지 않아도 관계 없습니다.
- DELETE FROM 학생 WHERE 이름 = '민수';
14. 다음 코드에서 괄호안에 알맞는 값을 변수명으로 작성하시오.
public class Sort {
public static void swap(int[] arr, int idx1, int idx2){
int temp = idx1;
arr[idx1] = arr[idx2];
arr[( 1 )] = temp;
}
public static void Usort(int[] array, int length){
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (array[j] > array[j + 1]) {
swap(array, j, j + 1);
}
}
}
}
public static void main(String[] args) {
int[] item = new int[] { 5, 3, 8, 1, 2, 7 };
int nx = 5;
Usort(item, ( 2 ));
for (int data : item) {
System.out.print(data + " ");
}
}
}
- 출력 값 : 1 2 3 5 7 8
- idx2
- nx
- 위의 코드는 정렬을 구현한 코드이다.
- 정렬에서 swap은 저장되어있는 각각의 값을 바꾸는 함수이기 때문에 temp에 저장되어 있던 값을 arr[idx2]로 불러와야 한다.
- 또한 Usort는 정의에서 배열과 길이가 전달되도록 하고 있기 때문에 main에서 길이인 nx를 전달해주어야 한다.
15. 다음 파이썬 코드의 알맞는 출력값을 작성하시오.
a = {'한국', '중국', '일본'}
a.add('베트남')
a.add('중국')
a.remove('일본')
a.update({'홍콩', '한국', '태국'})
print(a)
- {'한국', '중국', '베트남', '홍콩', '태국'}
- 순서 상관 없이 집합 연산이기 때문에 다섯 요소만 들어가면 된다.
- 집합은 중복을 허용하지 않기 때문에 각각의 요소들이 중복이 되지 않게 작성해야 한다.
16. 다음 표와 SQL의 결과를 확인하여 SQL을 작성하시오.
[성적]
순번 | 과목이름 | 점수 |
1 | 데이터베이스 | 89 |
2 | 데이터베이스 | 92 |
3 | 네트워크 | 88 |
4 | 소프트웨어 | 91 |
5 | 네트워크 | 89 |
6 | 소프트웨어 | 85 |
결과
과목이름 | 최소점수 | 최대점수 |
데이터베이스 | 89 | 92 |
- where사용하지 말하야 한다.
- SELECT절에 별칭을 사용하여 작성해야 한다.
- SQL 구문 마지막에 세미콜론 생락 가능하다.
- 반드시 GROUP BY와 having을 사용해야 한다.
- 집계함수를 사용해야 한다.
- 과목별 점수의 평균이 90점 이상인 '과목이름', '최소점수', '최대점수'를 출력해야한다.
- SELECT 과목이름, MIN(점수) AS '최소점수', MAX(점수) AS '최대점수' FORM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;
17. 다음 JAVA 코드에서 알맞는 출력 값을 작성하시오.
abstact class Vehicle {
String name;
abstract public String getName(String val);
public String getName() {
return "Vehicle name: " + name;
}
}
class Car extends Vehicle {
public Car(String val) {
name=super.name=val;
}
public String getName(String val) {
return "Car name:" + val;
}
public String getName(byte val[]) {
return "Car name:" + val;
}
}
public class Main {
public static void main(String[] args) {
Vehicle obj = new Car("Spark");
System.out.println(obj.getName());
}
}
- vehicle name = Spark
- Vehicle obj = new Car("Spark")를 실행하는 데 Car라는 생성자를 실행하면서 매개변수로 "Spark"를 넘겨주게 된다.
- Car의 생성자를 보면 setName(val);이라는 명령을 만나게 되는데 val이 매개변수로 받은 Spark이고, setName은 Vehicle클래스에 있으므로 Vehicle클래스의 setName메서드에 spark를 전달한다.
- setName 함수에서 매개변수로 받은 "Spark"를 name이라는 변수에 저장한다.
- print의 getName을 실행하게 되는데 getName에 파라미터가 없으므로 부모 클래스의 getName()메서드를 실행하게 된다.
18. 다음은 스키마와 관련된 내용이다. 각 괄호안에 알맞는 답을 작성하시오.
- ( 1 ) 스키마 - 사용자나 응용 프로그래머가 개인의 입장에서 필요한 데이터베이스의 논리적 구조를 정의한다.
- 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있기 때문에 서브 스키마라고도 한다.
- 하나의 데이터베이스 시스템에는 여러 개의 외부 스키마가 존재할 수 있다.
- 하나의 외부 스키마를 여러개의 응용 프로그램 혹은 사용자가 공유할 수 있다.
- ( 2 ) 스키마 - 데이터베이스의 전체적인 논리적 구조로, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스로 하나만 존재한다.
- 개체 간의 관계(Relationship)와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의한다.
- 데이터베이스 파일에 저장되는 데이터의 형태를 나타내는 것이다.
- 기관이나 조직체의 관점에서 데이터베이스를 정의한 것이다
- ( 3 ) 스키마 - 물리적인 저장장치 입장에서 데이터가 저장되는 방법을 기술한 것이다.
- 실제 데이터베이스에 저장될 레코드의 물리적인 구조를 정의한다.
- 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서, 인덱스 유/무 등을 나타낸다.
- 시스템 프로그래머나 시스템 설계자가 관리한다.
- 외부
- 개념
- 내부
- 스키마는 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조이다.
- 스키마는 외부/ 개념/ 내부 3계층으로 구성되어 있다.
- 외부 스키마는 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조이다. 사용자 뷰를 나타내고 서브 스키마로 불린다.
- 개념 스키마는 데이터베이스의 전체적인 논리적 구조이다. 전체적인 뷰를 나타내고 개체간의 제약조건, 접근권한, 무결성, 보안에 대해 정의한다.
- 내부 스키마는 물리적 저장 장치의 관점에서 보는 데이터베이스 구조이다. 실제로 데이터베이스에 저장 될 레코드의 형식을 정의하고 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 표현한다.
DDL의 대상
7-7
19. 다음 아래 제어 흐름 그래프가 분기 커버리지를 만족하기 위한 테스팅 순서를 쓰시오.

- 1234567,124561/1234561/124567
- 분기 커버리지는 결정 커버리지라고도 한다.
- 각 분기의 결정 포인트 내의 전체 조건식이 적어도 한번은 참과 거짓의 결과를 수행해야 하기 때문에 첫번째 분기 문도 참, 거짓이 한번씩 와야하고, 두 번째 분기문도 참, 거짓이 한 번씩 와야 한다.
- 1234561 -> 첫번째 분기문과 두번째 분기문이 둘 다 참일 경우
- 124567 -> 첫번째 분기문과 두번째 분기문이 둘 다 거짓일 경우
- 1234567 -> 첫번째 분기문이 참이고, 두번째 분기문이 거짓일 경우
- 124561 -> 첫번째 분기문이 거짓이고, 두번째 분기문이 참일 경우
- 따라서 답은 1234567,124561 일 경우와 1234561,124567일 경우 두 가지 경우이다.
소프트웨어 테스트 유형 - 테스트 기법에 따른 분류 - 화이트 박스 테스트
10-6
20. 다음 자바 코드에 대한 출력 값을 작성하시오.
class Parent {
int x = 100;
Parent() {
this(500);
}
Parent(int x) {
this.x = x;
}
int getX() {
return x;
}
}
class Child extends Parent {
int x = 4000;
Child() {
this(5000);
}
Child(int x) {
this.x = x;
}
}
public class Main {
public static void main(String[] args) {
Child obj = new Child();
System.out.println(obj.getX());
}
}
- 500
- 일단 main함수에서 Child obj를 생성하는데 생성자는 Child생성자를 호출하고 있다.
- Child클래스는 Parent클래스의 상속 관계이기 때문에 일단 Parent의 생성자 먼저 호출한다.
- 생성자를 호출할 때, 전달되는 매개변수가 없었으므로, 먼저 Parent()가 호출되고, 이때 Parent의 x값은 500이 된다.
- 그 후, 자식클래스의 생성자가 호출되는데 마찬가지로 매개변수가 없으므로 Child()가 호출되고, Child의 x값은 5000이 된다.
- 그 후, print에서 obj.getX()를 호출하고 있기 때문에 child부터 탐색을 한다.
- getX가 Child에 없으므로 Parent를 탐색한다.
- Parent에는 getX라는 함수가 있으므로 x를 불러 호출하는데, 여기서 getX는 Parent에 있는 함수이기 때문에 Parent의 x가 출력되게 된다.
틀린 답안 및 오타는 댓글 부탁 드립니다!
'Study > 정보처리기사' 카테고리의 다른 글
정보처리기사 2023년 3회를 위한 개념정리 (1) | 2023.10.03 |
---|---|
2023년 2회 정보처리기사 실기 기출문제 풀이 (0) | 2023.10.03 |
2022년 3회 정보처리기사 실기 기출문제 풀이 (0) | 2023.09.27 |
2022년 2회 정보처리기사 실기 기출문제 풀이 (1) | 2023.09.27 |
2022년 1회 정보처리기사 실기 기출문제 풀이 (0) | 2023.09.25 |
※ 모든 문제는 시험 응시자의 기억으로 복원 된 문제임을 알립니다. 따라서 문제의 지문과 답이 상이한 경우가 발생 할 수 있습니다. (서술형의 경우 정확하게 맞지 않을 수 있습니다.)
※ 또한, 모든 문제의 기본 풀이는 수제비2023 책을 기반으로 작성하였습니다. 오타가 있을 경우, 답이 틀렸을 경우 댓글 부탁드립니다.
※ 수제비 카페 바로가기 - https://cafe.naver.com/soojebi
1. 아래 자바 코드에서 출력되는 값을 작성하시오.
class Static{
public int a = 20;
static int b = 0;
}
public class Main{
public static void main(String[] args) {
int a;
a = 10;
Static.b = a;
Static st = new Static();
System.out.println(Static.b++);
System.out.println(st.b);
System.out.println(a);
System.out.print(st.a);
}
}
- 10
- 11
- 10
- 20
- static클래스에는 일반 변수와 스태틱 변수가 있다.
- 스태틱 변수는 쉽게말하면 전역 변수 취급을 받는다. 또한 정적 변수라고 불린다.
- 정적변수는 첫번째 print문처럼 클래스 자체에서 접근 가능하다.
- 이후, 첫번째 print문에서 후위증가 연산자를 사용하고있다.
- 후위증가는 보통 변수 뒤에 ++ , --를 붙여 사용하고, 뜻은 이 줄이 끝나는 순간 증감을 한다는 뜻이다.
- 따라서 첫 출력에서는 10이지만, 두번째 출력에서는 11이 출력된다.
- 세번째, 네번째 출력은 세번째 출력은 main의 a에 접근하여 10이 출력된다.
- 네번째 출력은 static클래스 안의 a에 접근하기 때문에 20이 출력되어야 한다.
2. 다음 C언어의 출력값을 작성하시오.
#include <stdio.h>
int main(){
char a[] = "Art";
char* p = NULL;
p = a;
printf("%s\n", a);
printf("%c\n", *p);
printf("%c\n", *a);
printf("%s\n", p);
for(int i = 0; a[i] != '\0'; i++)
printf("%c", a[i]);
}
- Art
- A
- A
- Art
- Art
- c에서 배열은 포인터라는 개념이 있어야 한다.
- 배열은 곧 포인터이므로, *연산또한 가능하다.
- 따라서 *p와 *a는 위 코드에서 같은 연산이 된다.
3. 다음 C언어의 출력값을 작성하시오.
#include <stdio.h>
int main(){
char* a = "qwer";
char* b = "qwtety";
for(int i = 0; a[i] != '\0' ; i++){
for(int j = 0; b[j] != '\0'; j++){
if(a[i] == b[j]) printf("%c", a[i]);
}
}
}
- qwe
- 반복문에서 모든 요소에 접근하면서 두 문자열 qwer과 qwtety를 비교하여, 같은 문자일때 출력을 하고 있다.
- 여기서 주의할 점은, 반복문이 모든 요소에 하나하나 차례로 접근하고 있다는 점이다.
- 따라서 qwer로 햇갈리면 안된다. 차근차근 풀어나가는것이 중요함.
4. 다음 괄호안에 들어가는 용어의 Full Name 또는 약자를 작성하시오.
- ( )은/는 비동기적인 웹 애플리케이션의 제작을 위해 JavaScript와 XML을 이용한 비동기적 정보 교환 기법이다.
- ( )은/는 필요한 데이터만을 웹서버에 요청해서 받은 후 클라이언트에서 데이터에 대한 처리를 할 수 있다.
- 보통 SOAP이나 XML 기반의 웹 서비스 프로토콜이 사용되며, 웹 서버의 응답을 처리하기 위해 클라이언트 쪽에서는 자바스크립트를 쓴다.
- ( )은/는 Google Map과 Google pages에서 사용한 기술에 기반하여 제작되었다.
- AJAX(Asynchronous Javascript And XML)
- AJAX는 자바 스크립트를 사용하여 웹 서버와 클라이언트 간 비동기적으로 XML 데이터를 교환하고 조작하기 위한 웹 기술이다.
- 하이퍼텍스트 표기 언어마능로는 어려운 다양한 작업을 웹 페이지에서 구현해서 이용자가 웹 페이지와 자유롭게 상호 작용 할 수 있도록 구현하는 기법이다.
AJAX
5-9
5. 아래 내용을 확인하여 괄호 안에 용어를 표안에 알맞는 값을 고르시오.
- ( ) - 회선교환 방식과 데이터그램 방식의 장점을 결합한 통신 기술이다.
- 처음 패킷으로 최적의 경로를 고정하고 경로가 고정되면 그 다음은 패킷으로 나누어 고속으로 전송할 수 있다.
- 통신기술에는 ATM이 있으며, 정해진 시간 안이나 다량의 데이터를 연속으로 보낼 때 적합하다.
- ( ) - 패킷교환 방식으로 동작하면서 IP 주소를 사용하는 인터넷을 의미한다.
- 각 전송패킷을 미리 정해진 경로 없이 독립적으로 처리하여 교환하는 방식이다
- 특정 교환기의 고장 시 모든 패킷을 잃어버리는 가상회선과 달리, 그 경로를 피해서 전송할 수 있으므로 더욱 신뢰가 가능하다.
- 짧은 메시지의 패킷들을 전송할 때 효과적이고 재정렬 기능이 필요하다.
- 가상회선
- 데이터그램
- 패킷 교환 방식의 종류에는 데이터그램 방식과 가상회선 방식이 있다.
구분 | 데이터그램 | 가상회선 |
개념 | 연결 경로를 확립하지 않고 각각의 패킷을 순서에 무관하게 독립적으로 전송하는 방식 | 패킷이 전송되기 전에 송/수신 스테이션 간의 논리적인 통신 경로를 미리 설정하는 방식 |
동작 원리 및 특징 |
각각의 패킷을 독립적으로 취급하는 방식으로, 앞에 보낸 메시지나 앞으로 보낼 메시지의 어떠한 결과와도 관계가 없는 단일 패킷 단위로 전송하고, 수신하는 방식 헤더를 붙여서 개별적으로 전달하는 비연결형 교환 방식 |
많은 이용자들이 상호 통신을 할 때 하나의 통신 설비를 공유하여 여러개의 논리적인 채널을 확정한 후 통신을 할 수 있는 방식 목적지 호스트와 미리 연결 후 통신하는 연결형 교환 방식 |
패킷 교환방식의 종류
11-71
6. 아래 내용을 확인하여 알맞는 답을 작성하시오.
- 2 계층(데이터링크 계층)에서 구현되는 터널링 기술 중 하나
- L2F와 PPTP가 결합된 프로토콜로 VPN과 인터넷 서비스 제공자(ISP)가 이용
- IPsec을 함께 사용하면 PPTP보다 훨씬 안전하지만 보안보다 익명화에 더 적합
- L2TP
- L2TP는 Layer 2 Tunneling Protocol(계층 2 터널링 프로토콜)의 약자입니다. L2TP는 L2F(계층 2 포워딩 프로토콜)와 PPTP(지점간 터널링 프로토콜)가 결합된 프로토콜로 1999년에 처음 제안되었습니다. L2TP는 자체적으로 강력한 암호화 또는 인증을 제공하지 않기 때문에 IPsec이라는 또다른 프로토콜이 L2TP와 함께 사용되는 경우가 많습니다. (출처 https://www.expressvpn.com/kr/what-is-vpn/protocols/l2tp)
- 책에서는 못찾았음...
7. 아래 내용에서 괄호안에 알맞는 용어를 작성하시오.
- ( ) 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다.
- ( ) 보안 접속을 통한 rsh, rcp, rlogin, rexec, telnet, ftp 등을 제공하며, IP spoofing (IP스푸핑, 아이피 위/변조 기법중 하나)을 방지하기 위한 기능을 제공한다.
- ( ) 기본적으로 포트는 22번이다.
- SSH
- SSH는 Telnet보다 강력한 보안을 제공하는 원격 접속 프로토콜이다.
- 서로 연결되어 있는 컴퓨터 간 원격 명령 실행이나 쉘 서비스등을 수행한다.
- 키를 통한 인증은 클아이언트의 공개키를 서버에 등록해야 하고, 전송되는 데이터는 암호화된다.
- SSH는 인증, 암호화, 압축, 무결성을 제공하고 기본 네트워크 포트는 22번을 사용한다.
- 추가로 응용계층 프로토콜은 포트번호가 있고, 포트번호를 알고 있으면 문제 풀기 용이하다.
HTTP | 80 |
FTP | 21 |
SMTP | 25 |
POP3 | 110 |
IMAP | 143 |
Telnet | 23 |
SSH | 22 |
SNMP | 161 |
응용계층 - 응용계층의 프로토콜
11-68
8. 아래 설명에 대한 알맞는 답을 작성하시오.
- ( 1 ) - 감염된 컴퓨터 시스템에서 스스로 복제해 다른 컴퓨터로 복사본을 확산시킬 수 있는 악성 프로그램이다.
- 독자적으로 실행되며 다른 실행 프로그램이 필요하지 않으며, 파일 전송 기능을 착취하도록 설계된다.
- 자가 복제 및 네트워크를 통한 전파도 가능하다.
- ( 2 ) - 정상적인 프로그램으로 가장해 사용자가 직접 컴퓨터에 설치하도록 위장하며, 백도어를 만들어 공격자가 침입할 수 있도록 만들거나 시스템을 파괴한다.
- 정상적인 프로그램으로 위장하여 시작부터 끝까지 램에 상주하며, 시스템 내부 정보를 공격자의 컴퓨터로 빼돌리는 프로그램이다.
- 좀비PC처럼 내부정보 유출뿐만 아니라 컨트롤까지 가능한 종류가 있고, 단순히 내부 데이터만 유출할 수 있는 타입의 트로이 목마가 있다.
- 감염된 후에 스스로를 복제하는 능력은 없다.
- ( 3 ) - 대상(정상파일)을 감염시키는 형태로 실행되며, 감염시킬 대상이 존재하지 않을 때에는 실행되지 않으며 다른정상파일로의 자기 복제 기능이 있다.
- 컴퓨터 시스템에 침입해 프로그램에 기생하며 시스템을 변경하거나 사용할 수 없도록 만드는 악성코드이다.
- 네트워크를 통해 전파되지 않으며 방식 및 위치에 따라 여러형태로 나뉜다.
- 웜
- 트로이목마
- 바이러스
- 웜은 스스로를 복제하여 네트워크 등의 연결을 통하여 전파하는 악성 소프트웨어 컴퓨터 프로그램이다. 컴퓨터 바이러스와 비슷하지만, 바이러스가 다른 실행 프로그램에 기생하여 실행되는데 반해 웜은 독자적으로 실행된다.
- 트로이목마는 악성 루틴이 숨어있는 프로그램으로 겉보기에는 정상적인 프로그램이지만 실행하면 악성코드를 실행하는 프로그램이다.
보안 관련 용어
9-15, 9-12 바이러스는 찾지 못함.
9. 다음 아래 코드에서 이진수를 십진수로 변환하는 코드에 대해 괄호 (a) (b)의 적합한 답을 작성하시오.
#include <stdio.h>
int main() {
int input = 101110;
int di = 1;
int sum = 0;
while (1) {
if (input == 0) break
else {
sum = sum + (input (a)(b)) * di;
di = di * 2;
input = input / 10;
}
}
printf("%d", sum);
return 0;
}
- a : % b: 10
- or
- a : & b : 1
10. 다음 보안 관련 설명으로 괄호안에 알맞는 용어를 작성하시오.
- ( )은/는 TCP/IP에서 IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜이다.
- ( ) 프로토콜은 보통 다른 호스트나 게이트웨이 와 연결된 네트웍에 문제가 있는지 확인하기 위한 목적으로 주로 사용된다.
- ( ) 을/를 이용한 공격에는 ( ) Flooding가 있는데 ping 명령어를 통한 ( ) 패킷을 연속적으로 계속 보내어 서버의 요청에 응답으로 인한 다른작업을 하지 못하도록 하는 공격이다.
- ICMP
- ICMP는 IP의 동작 과정에서 전송 오류가 발생하는 경우 오류 정보를 전송하는 목적으로 사용하는 프로토콜이다.
- ICMP 프로토콜을 사용하여 ping 유틸리티의 구현을 통해 오류가 발생했음을 알리는 기능을 수행한다.
- UDP/ICMP Flooding공격은 DDos공격의 일종으로, 대역폭 소진 공격이다.
11. 다음은 디자인 패턴에 관한 설명이다. 설명에 내용에 알맞는 답을 고르시오.
- 다른 무언가와 이어지는 인터페이스 역할을 하는 클래스를 의미한다.
- 실제 객체를 호출하면 행위를 중간에 가로채서 다른 동작을 수행하는 객체로 변경한다.
- 객체를 정교하게 제어해야 하거나 객체 참조가 필요한 경우 사용한다.
- 분리된 객체를 위임함으로써 대리 작업을 중간 단계에 삽입할 수도 있으며 분리된 객체를 동적으로 연결함으로써 객체의 실행 시점을 관리할 수도 있다.
- Proxy
- Proxy패턴은 구조패턴 중 하나로, 실체 객체에 대한 대리 객체로 실체 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 만들며, 이 점을 이용해서 미리 할당하지 않아도 상관없는 것들을 실제 이용할 때 할당하게 하여 메모리 동룡을 아낄 수 있으며, 실체 객체를 드러나지 않게 하여 정보은닉의 역할도 수행하는 디자인 패턴이다.
- 특정 객체로의 접근을 제어하기 위한 용도로 사용한다.
- 생성
Builder
조립Prototype
원형 복사Factory Method
상위 클래스에서 객체 생성
하위 클래스에서 인스턴스 생성Abstract Factory
구체적인 클래스 의존XSingletone
객체 하나 생성Bridge
연결Decorator
장식추가Facade
단순한 인터페이스Flyeight
클래스 경량화Proxy
대리객체,Composite
부분 - 전채Adepter
중간 역할Observer
상태 변경 -> 다른 객체 연락Mediator
중재자Visitor
클래스를 돌아다님Strategy
캡슐화 된 클래스 필요시 교환
디자인 패턴
1-29
2. 다음은 데이터베이스에 관련된 내용이다. 각 괄호안에 알맞는 답을 작성하시오.
- ( 1 ) - 셀 수 있는 수량의 순서 있는 열거이다.
- 어떤 요소의 집합, 혹은 테이블에서의 행을 가리키지만 일반적인 집합과는 달리 중복이 허용될 수 있다.
- 리스트와 동일하게 여러 객체를 모아서 담으며, 숫자, 문자, 객체, 배열, 튜플 안의 튜플 전부 가능하다.
- ( 2 ) - 어느 한 시점에 릴레이션의 내용(상태), 즉 저장된 데이터 전체를 의미한다.
- 단순히 릴레이션 또는 릴레이션 외연(Relation Extension)라고도 한다.
- ( 3 ) - 특정 데이터 집합의 유니크(Unique)한 값의 개수이다.
- 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표이다.
- 튜플
- 릴레이션
- 카디널리티
- 튜플은 릴레이션 행에 해당하는 요소이다.
- 릴레이션은 테이블을 말한다.
- 카디널리티는 튜플(행)의 수를 나타낸다.
13. [학생] 테이블에서 학생 이름이 '민수'인 튜플을 삭제하는 쿼리를 작성하시오.
순번 | 학년 | 이름 |
1 | 1 | 종현 |
2 | 2 | 민수 |
3 | 2 | 수연 |
4 | 3 | 수지 |
- 컬럼의 값이 문자열일 경우 작은 따움표 (' ')를 표시하시오.
- SQL 마지막에 세미콜론(;)은 표기하지 않아도 관계 없습니다.
- DELETE FROM 학생 WHERE 이름 = '민수';
14. 다음 코드에서 괄호안에 알맞는 값을 변수명으로 작성하시오.
public class Sort {
public static void swap(int[] arr, int idx1, int idx2){
int temp = idx1;
arr[idx1] = arr[idx2];
arr[( 1 )] = temp;
}
public static void Usort(int[] array, int length){
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (array[j] > array[j + 1]) {
swap(array, j, j + 1);
}
}
}
}
public static void main(String[] args) {
int[] item = new int[] { 5, 3, 8, 1, 2, 7 };
int nx = 5;
Usort(item, ( 2 ));
for (int data : item) {
System.out.print(data + " ");
}
}
}
- 출력 값 : 1 2 3 5 7 8
- idx2
- nx
- 위의 코드는 정렬을 구현한 코드이다.
- 정렬에서 swap은 저장되어있는 각각의 값을 바꾸는 함수이기 때문에 temp에 저장되어 있던 값을 arr[idx2]로 불러와야 한다.
- 또한 Usort는 정의에서 배열과 길이가 전달되도록 하고 있기 때문에 main에서 길이인 nx를 전달해주어야 한다.
15. 다음 파이썬 코드의 알맞는 출력값을 작성하시오.
a = {'한국', '중국', '일본'}
a.add('베트남')
a.add('중국')
a.remove('일본')
a.update({'홍콩', '한국', '태국'})
print(a)
- {'한국', '중국', '베트남', '홍콩', '태국'}
- 순서 상관 없이 집합 연산이기 때문에 다섯 요소만 들어가면 된다.
- 집합은 중복을 허용하지 않기 때문에 각각의 요소들이 중복이 되지 않게 작성해야 한다.
16. 다음 표와 SQL의 결과를 확인하여 SQL을 작성하시오.
[성적]
순번 | 과목이름 | 점수 |
1 | 데이터베이스 | 89 |
2 | 데이터베이스 | 92 |
3 | 네트워크 | 88 |
4 | 소프트웨어 | 91 |
5 | 네트워크 | 89 |
6 | 소프트웨어 | 85 |
결과
과목이름 | 최소점수 | 최대점수 |
데이터베이스 | 89 | 92 |
- where사용하지 말하야 한다.
- SELECT절에 별칭을 사용하여 작성해야 한다.
- SQL 구문 마지막에 세미콜론 생락 가능하다.
- 반드시 GROUP BY와 having을 사용해야 한다.
- 집계함수를 사용해야 한다.
- 과목별 점수의 평균이 90점 이상인 '과목이름', '최소점수', '최대점수'를 출력해야한다.
- SELECT 과목이름, MIN(점수) AS '최소점수', MAX(점수) AS '최대점수' FORM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;
17. 다음 JAVA 코드에서 알맞는 출력 값을 작성하시오.
abstact class Vehicle {
String name;
abstract public String getName(String val);
public String getName() {
return "Vehicle name: " + name;
}
}
class Car extends Vehicle {
public Car(String val) {
name=super.name=val;
}
public String getName(String val) {
return "Car name:" + val;
}
public String getName(byte val[]) {
return "Car name:" + val;
}
}
public class Main {
public static void main(String[] args) {
Vehicle obj = new Car("Spark");
System.out.println(obj.getName());
}
}
- vehicle name = Spark
- Vehicle obj = new Car("Spark")를 실행하는 데 Car라는 생성자를 실행하면서 매개변수로 "Spark"를 넘겨주게 된다.
- Car의 생성자를 보면 setName(val);이라는 명령을 만나게 되는데 val이 매개변수로 받은 Spark이고, setName은 Vehicle클래스에 있으므로 Vehicle클래스의 setName메서드에 spark를 전달한다.
- setName 함수에서 매개변수로 받은 "Spark"를 name이라는 변수에 저장한다.
- print의 getName을 실행하게 되는데 getName에 파라미터가 없으므로 부모 클래스의 getName()메서드를 실행하게 된다.
18. 다음은 스키마와 관련된 내용이다. 각 괄호안에 알맞는 답을 작성하시오.
- ( 1 ) 스키마 - 사용자나 응용 프로그래머가 개인의 입장에서 필요한 데이터베이스의 논리적 구조를 정의한다.
- 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있기 때문에 서브 스키마라고도 한다.
- 하나의 데이터베이스 시스템에는 여러 개의 외부 스키마가 존재할 수 있다.
- 하나의 외부 스키마를 여러개의 응용 프로그램 혹은 사용자가 공유할 수 있다.
- ( 2 ) 스키마 - 데이터베이스의 전체적인 논리적 구조로, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스로 하나만 존재한다.
- 개체 간의 관계(Relationship)와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의한다.
- 데이터베이스 파일에 저장되는 데이터의 형태를 나타내는 것이다.
- 기관이나 조직체의 관점에서 데이터베이스를 정의한 것이다
- ( 3 ) 스키마 - 물리적인 저장장치 입장에서 데이터가 저장되는 방법을 기술한 것이다.
- 실제 데이터베이스에 저장될 레코드의 물리적인 구조를 정의한다.
- 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서, 인덱스 유/무 등을 나타낸다.
- 시스템 프로그래머나 시스템 설계자가 관리한다.
- 외부
- 개념
- 내부
- 스키마는 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조이다.
- 스키마는 외부/ 개념/ 내부 3계층으로 구성되어 있다.
- 외부 스키마는 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조이다. 사용자 뷰를 나타내고 서브 스키마로 불린다.
- 개념 스키마는 데이터베이스의 전체적인 논리적 구조이다. 전체적인 뷰를 나타내고 개체간의 제약조건, 접근권한, 무결성, 보안에 대해 정의한다.
- 내부 스키마는 물리적 저장 장치의 관점에서 보는 데이터베이스 구조이다. 실제로 데이터베이스에 저장 될 레코드의 형식을 정의하고 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 표현한다.
DDL의 대상
7-7
19. 다음 아래 제어 흐름 그래프가 분기 커버리지를 만족하기 위한 테스팅 순서를 쓰시오.

- 1234567,124561/1234561/124567
- 분기 커버리지는 결정 커버리지라고도 한다.
- 각 분기의 결정 포인트 내의 전체 조건식이 적어도 한번은 참과 거짓의 결과를 수행해야 하기 때문에 첫번째 분기 문도 참, 거짓이 한번씩 와야하고, 두 번째 분기문도 참, 거짓이 한 번씩 와야 한다.
- 1234561 -> 첫번째 분기문과 두번째 분기문이 둘 다 참일 경우
- 124567 -> 첫번째 분기문과 두번째 분기문이 둘 다 거짓일 경우
- 1234567 -> 첫번째 분기문이 참이고, 두번째 분기문이 거짓일 경우
- 124561 -> 첫번째 분기문이 거짓이고, 두번째 분기문이 참일 경우
- 따라서 답은 1234567,124561 일 경우와 1234561,124567일 경우 두 가지 경우이다.
소프트웨어 테스트 유형 - 테스트 기법에 따른 분류 - 화이트 박스 테스트
10-6
20. 다음 자바 코드에 대한 출력 값을 작성하시오.
class Parent {
int x = 100;
Parent() {
this(500);
}
Parent(int x) {
this.x = x;
}
int getX() {
return x;
}
}
class Child extends Parent {
int x = 4000;
Child() {
this(5000);
}
Child(int x) {
this.x = x;
}
}
public class Main {
public static void main(String[] args) {
Child obj = new Child();
System.out.println(obj.getX());
}
}
- 500
- 일단 main함수에서 Child obj를 생성하는데 생성자는 Child생성자를 호출하고 있다.
- Child클래스는 Parent클래스의 상속 관계이기 때문에 일단 Parent의 생성자 먼저 호출한다.
- 생성자를 호출할 때, 전달되는 매개변수가 없었으므로, 먼저 Parent()가 호출되고, 이때 Parent의 x값은 500이 된다.
- 그 후, 자식클래스의 생성자가 호출되는데 마찬가지로 매개변수가 없으므로 Child()가 호출되고, Child의 x값은 5000이 된다.
- 그 후, print에서 obj.getX()를 호출하고 있기 때문에 child부터 탐색을 한다.
- getX가 Child에 없으므로 Parent를 탐색한다.
- Parent에는 getX라는 함수가 있으므로 x를 불러 호출하는데, 여기서 getX는 Parent에 있는 함수이기 때문에 Parent의 x가 출력되게 된다.
틀린 답안 및 오타는 댓글 부탁 드립니다!
'Study > 정보처리기사' 카테고리의 다른 글
정보처리기사 2023년 3회를 위한 개념정리 (1) | 2023.10.03 |
---|---|
2023년 2회 정보처리기사 실기 기출문제 풀이 (0) | 2023.10.03 |
2022년 3회 정보처리기사 실기 기출문제 풀이 (0) | 2023.09.27 |
2022년 2회 정보처리기사 실기 기출문제 풀이 (1) | 2023.09.27 |
2022년 1회 정보처리기사 실기 기출문제 풀이 (0) | 2023.09.25 |