[정보처리기사 실기] 2023년 1회 기출문제 풀이
1. 아래 자바 코드에서 출력되는 값을 작성하시오.
class Static{
public int a = 20;
static int b = 0;
}
public class Test{
public static void main(String[] args) {
int 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
출제 : [프로그래밍 언어–JAVA언어–static]
static 메모리에 있는 변수는 일반적인 인스턴스 변수(Non-static 변수)와 다르게 프로그램 내 모든 객체와 공유된다

Static.b = a; // Static.b에 a값 (10) 할당
Static st = new Static(); // Static의 인스턴스인 st.b 값에도 10이 할당됨
System.out.println(Static.b++); // 후위연산자, 10이 출력되고 1 증가 (Static.b는 11)
System.out.println(st.b); //st는 Static 클래스의 인스턴스, Static.b는 11인 상태, 따라서 11 출력
System.out.println(a); // 우선순위가 높은 자기 자신 블록에 있는 것
System.out.print(st.a)
2. 다음 C언어의 출력값을 작성하시오.
#include
int main(){
char a[] = "Art";
char* p = NULL;
p = a;
printf("%sn", a);
printf("%cn", *p);
printf("%cn", *a);
printf("%sn", p);
for(int i = 0; a[i] != ''; i++)
printf("%c", a[i]);
}
정답:
Art
A
A
Art
Art
출제 : [프로그래밍 언어13 - 1.C언어 – 13)포인터]
char a[] = “Art”; ← a[] : {‘A’, ‘r’, ‘t’, ‘\0’}
%s : 해당 포인터부터 문자열 출력. char * 형
%c : 해당 포인터의 문자 하나 출력. char 형
*(p+i)==p[i]==*&p[i]

3. 다음 C언어의 출력값을 작성하시오.
#include
int main(){
char* a = "qwer";
char* b = "qwtety";
for(int i = 0; a[i] != '' ; i++){
for(int j = 0; b[j] != ''; j++){
if(a[i] == b[j]) printf("%c", a[i]);
}
}
}
정답: qwe
- 출제 : [프로그래밍 언어– C언어– 포인터]
C에서 배열끝에 \0 널

4. 다음 괄호안에 들어가는 용어의 Full Name 또는 약자를 작성하시오.
( )은/는 비동기적인 웹 애플리케이션의 제작을 위해 JavaScript와 XML을 이용한 비동기적 정보 교환 기법이다.
( )은/는 필요한 데이터만을 웹서버에 요청해서 받은 후 클라이언트에서 데이터에 대한 처리를 할 수 있다.
보통 SOAP이나 XML 기반의 웹 서비스 프로토콜이 사용되며, 웹 서버의 응답을 처리하기 위해 클라이언트 쪽에서는 자바스크립트를 쓴다.
( )은/는 Google Map과 Google pages에서 사용한 기술에 기반하여 제작되었다.
정답: AJAX
XML + 언어 = WSDL
XML + 프로토콜 = SOAP
XML + JAVA = AJAX
XML + 검색 = UDDI
XML + 대체 = JSON
5. 아래 내용을 확인하여 괄호 안에 용어를 표안에 알맞는 값을 고르시오.
정답: 가상회선, 데이터그램
가상 회선 : 다량 데이터
데이터그램 : 짧은 패킷
6. 아래 내용을 확인하여 알맞는 답을 작성하시오.
○ 2 계층(데이터링크 계층)에서 구현되는 터널링 기술 중 하나
○ L2F와 PPTP가 결합된 프로토콜로 VPN과 인터넷 서비스 제공자(ISP)가 이용
○ IPsec을 함께 사용하면 PPTP보다 훨씬 안전하지만 보안보다 익명화에 더 적합
정답: L2TP
시스코의 L2F(Layer 2 Forwarding) 와 PPTP을 조합하여 만든 VPN이다. 보통 IPsec과 같은 보안용 프로토콜과 같이 사용합니다.

7. 다음 설명에 해당하는 알맞은 용어를 영문 3글자로 쓰시오.
○ 다른 컴퓨터에 로그인, 원격 명령 실행, 파일 복사 등을 수행할 수 있도록 다양한 기능을 지원하는 프로토콜 또는 이를 이용한 응용 프로그램이다.
○ 데이터 암호화와 강력한 인증 방법으로 보안성이 낮은 네트워크에서도 안전하게 통신할 수 있다.
○ 키(Key)를 통한 인증 방법으로 사용하려면 사전에 클라이언트의 공개키를 서버에 등록해야 한다.
○기본적으로는 22번 포트를 사용한다.
정답: SSH
원격제어
SSH : 22, 암호화하여
telnet : 23, 평문으로
8. 를 참고하여 아래 설명에 대한 (1) ~ (3)의 알맞는 답을 작성하시오.
- 트로이 목마
- 웜
- 바이러스
정답 : 1. 웜 2. 트로이 목마 3. 바이러스
- 출제 : [보안02 – 5.보안 용어]
1- 자가복제 가능, 이메일 공유폴더 p2p 네트워크를 이용 스스로 전파(웜)
2-"사용자가 의도치 않은 소스코드 ~" 몰래 숨겨놓는다(트로이목마)
3 - ㄱ과 같은 특성을 가지고 확장 된다. 스스로 전파 못한다 (바이러스)
* 웜 : 자기 복제, 자가 전파 가능 (숙주 필요 없음)
* 트로이목마 : 사용자가 의도치 않은 소스코드, 자기 복제 X (숙주 필요 없음)
* 바이러스 : 자기 복제 능력이 있으나 자가 전파는 안됨. (숙주 필요)
9. 다음 아래 코드에서 이진수를 십진수로 변환하는 코드에 대해 괄호 (a) (b)의 적합한 답을 작성하시오.
#include
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 5 or 2
또는
(a) & , (b) 1
출제 : [프로그래밍 언어- C언어)제어문(if문, switch문, while문, do~while문, for문)]
2진수를 10진수로

10. 다음 보안 관련 설명으로 괄호안에 알맞는 용어를 작성하시오.
( )은/는 TCP/IP에서 IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜이다.
( ) 프로토콜은 보통 다른 호스트나 게이트웨이 와 연결된 네트웍에 문제가 있는지 확인하기 위한 목적으로 주로 사용된다.
( ) 을/를 이용한 공격에는 ( ) Flooding가 있는데 ping 명령어를 통한 ( ) 패킷을 연속적으로 계속 보내어 서버의 요청에 응답으로 인한 다른작업을 하지 못하도록 하는 공격이다.
정답: Internet Control Message Protocol(ICMP)
오류메세지 전송
. Internet Control Message Protocol / 헤더 8Byte
. IP와 함께 통신 간 오류 처리와 전송 경로 변경 등 제어 메시지 관리
11. 다음은 디자인 패턴에 관한 설명이다. 설명에 내용에 알맞는 답을 고르시오.
( )은/는 복잡한 시스템을 개발하기 쉽도록 클래스나 객체을 조합하는 패턴에 속하며,
대리라는 이름으로도 불린다. 내부에서는 객체 간의 복잡한 관계를 단순하게 정리해 주고,
외부에서는 객체의 세부인 내용을 숨기는 역할을 한다.
정답 : Proxy
대리 = proxy
구조 패턴 - 구 브데 퍼플 프록컴어
: 구조 - 브리지 / 데코레이터 / 퍼사이드 / 플라이 웨이트 / 프록시 / 컴포지트 / 어댑터

12. 릴레이션의 구성하는 용어들에 대한 다음 설명에서 괄호(① ~ ③)에 들어갈 알맞은 답을 에서 찾아 쓰시오.
○도메인 ○차수 ○속성 ○튜플
○디그리 ○카디널리티 ○릴레이션 스키마 ○릴레이션 인스턴스
정답:
① 튜플
② 릴레이션 인스턴스
③ 카디널리티
릴레이션 스키마: 구조를 나타내는 릴레이션
릴레이션 인스턴스: 실제 값들
* 속디차: 속성(열) = 디그리 = 차수
* 행튜카: 튜플(행) = 카디널리티

13. [학생] 테이블에서 학생 이름이 '민수'인 튜플을 삭제하는 쿼리를 작성하시오.
조건
- 컬럼의 값이 문자열일 경우 작은 따옴표 (' ')를 표시하시오.
- SQL 마지막에 세미콜론(;)은 표기하지 않아도 관계 없습니다.
정답 : delete from 학생 where 이름='민수'
[기본형식]
DELETE FROM 테이블명 [WHERE 조건];
14. 다음 코드에서 괄호안에 알맞는 값을 변수명으로 작성하시오.
#include
void swap(int *a, int idx1, int idx2) {
int t= a[idx1];
a[idx1] = a[idx2];
a[( ① )] = t;
}
void Usort(int *a, int len) {
for(int i = 0; i < len - 1; i++)
for(int j = 0; j < len - 1 - i; j++)
if(a[j] > a[j+1])
swap(a,j,j+1);
}
void main(){
int a[] = {85, 75, 50, 100, 95};
int nx = 5;
Usort(a, ( ② ));
}
정답:
(1) idx2
(2) nx
- 출제 : [프로그래밍 언어- C언어)배열]
버블 정렬 - a[①] = t, sort(a, ②)
15. 다음 파이썬 코드의 알맞는 출력값을 작성하시오.
a = {'한국', '중국', '일본'}
a.add('베트남')
a.add('중국')
a.remove('일본')
a.update({'홍콩', '한국', '태국'})
print(a)
정답: {'한국', '중국', '베트남', '홍콩', '태국'}
- 출제 : [프로그래밍 언어 - Python언어)입출력 함수, 리스트, 문자열, 튜풀, 딕셔너리, 집합]
파이썬 딕셔너리형으로 "출력 결과의 순서는 상관 없습니다."
값이 중복되지 않아야 하며, 출력 결과는 중괄호 {} 및 , 와 ‘ ’ 을 생략 시 오답 처리 됩니다.
set에 사용되는 함수
add | 값 1개를 추가(중복값은 무시)
update| 값 여러개를 추가(중복값은 무시)
remove| 특정 값 제거(값이 없을 경우 무시)
16. 다음 성적 테이블에서 과목별 점수의 평균이 90점 이상인 '과목이름', '최소점수', '최대점수' 를 검색하고자 한다. [조건]을 참고하여 적합한 SQL문을 작성하시오.
[조건]
- WHERE사용하지 말아야 한다.
- SELECT절에 별칭을 사용하여 작성해야 한다.
- SQL 구문 마지막에 세미콜론(;)은 생락 가능하다.
- 반드시 GROUP BY와 HAVING 을 사용해야 한다.
- 집계 함수를 사용해야 한다.
SELECT 과목이름 ,MIN(점수) AS 최소점수 ,MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름 HAVING AVG(점수) >= 90
- 출제 : [SQL02 – 2.DML]
셀프웨구해오
SELECT 컬럼1, 컬럼2, ..., 집계함수
FROM 테이블명
[WHERE 조건]
GROUP BY 컬럼1, 컬럼2, ...
[HAVING 조건식(집계함수 포함)]
GROUP BY 구문 : 복수행 대상의 데이터 분석 시 그룹핑 대상이 되는 부분을 선별해야 하는 경우 사용
HAVING 구문 : GROUP BY 구문의 기준 항목이나 소그룹 집계 함수를 활용한 조건을 적용하기 위해 사용
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
출제 : [프로그래밍 언어 - JAVA언어)생성자, 상속, 오버라이딩, 오버로딩, 추상 클래스]
obj.getName()이 Vehicle의 메소드를 호출한 이유는 Car 클래스에 getName() 메소드가 없기 때문입니다.
18. 다음은 스키마와 관련된 내용이다. 각 괄호안에 알맞는 답을 작성하시오.
스키마
정답 : ㉠ 외부, ㉡ 개념, ㉢ 내부
- 출제 : [데이터베이스01 - 1.데이터베이스 개념]
#외개In
외부 : 사용자 뷰
개념 : 전체적인 뷰
내부 : 물리적 저장장치
19. 다음 아래 제어 흐름 그래프가 분기 커버리지를 만족하기 위한 테스팅 순서를 쓰시오.
정답 : ① 1234561 ② 124567 또는 ① 1234567 ② 124561
- 출제
화이트박스 분기 커버리지 [기출]
결정(분기) 커버리지 : 프로그램 내 전체 결정문이 적어도 한 번은 참/거짓 결과 수행
분기점(branch, 두개로 나뉘는 부분, 마름모) 위주로 테스트
YES NO : ① 1234567
NO YES : ② 124561
YES YES ① 1234561
NO NO ② 124567
20. 다음 Java 코드에 대한 출력 값을 작성하시오.
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

1) Child obj = new Child(); 에서 생성자 호출
→ [class Child] Child() { this(5000); } → Child(int x) { this.x = x; } → [class Parent] Parent() { this(500); } → Parent(int x) { this.x = x; } → Parent의 x값 : 500 → Child의 x값 : 5000
=> obj 객체 내 Parent 클래스의 x값은 500, Child 클래스의 x값은 5000이 된다
2) obj.getX();
→ [class Parent] int getX() { return x; } (Child에서 getX() 메소드를 오버라이드 하지 않았으므로 Parent의 getX() 메소드를 호출한다)
=> obj 객체 내 Parent 클래스의 x값인 500을 리턴