[정보처리기사 실기] 2020년 3회 기출문제 풀이
1. 리팩토링의 목적에 대한 설명을 작성하시오.
가독성 향상, 유지보수 편리
- 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 개선함
- 결과의 변경없이 코드의 구조를 재조정하는 것으로 가독성을 높이고, 유지보수를 쉽게하기 위한 목적
- 코드의 외부 행위는 바꾸지 않고 내부 구조를 개선시켜 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것
2. 다음의 출력 결과를 쓰시오.
#include <stdio.h>
void main() {
int c=0;
int i=0;
while(i<10) {
i++;
c *= i;
}
printf("%d", c);
}
정답: 0
c=c*i → c=(0*1) (c*2) (c*3) (c*4) (c*5) (c*6) (c*7) (c*8) (c*9) (c*10)
3. 다음 학생 테이블에서 이름이 민수인 튜플을 삭제하도록 결과를 작성하시오.
- 테이블명: 학생
- 필드명: 이름
정답: DELETE FROM 학생 WHERE 이름 = '민수'
DELETE FROM 테이블명
WHERE 조건절;
4. TCP/IP에서 신뢰성없는 IP를 대신하여 송신측으로 네트워크의 IP 상태 및 에러 메시지를 전달해주는 프로토콜을 ( )이라 한다.
정답: Internet Control Message Protocol(ICMP)
Internet Control Message Protocol / 헤더 8Byte
IP와 함께 통신 간 오류 처리와 전송 경로 변경 등 제어 메시지 관리
5. 다음의 출력 결과를 쓰시오.
public class Test{
public static void main(String []args){
int i=0;
int sum=0;
while (i<10){
i++;
if(i%2==1)
continue;
sum += i;
}
System.out.print(sum);
}
}
정답: 30
sum 0(초기값) + 2 + 4 + 6 + 8 + 10 = 30 (짝수만 더하기)
6. 심리학자 톰 마릴은 컴퓨터가 메시지를 전달하고 메시지가 제대로 도착했는지 확인하며 도착하지 않았을 경우 메시지를 재전송하는 일련의 방법을 '기술적 은어'를 뜻하는 ( )이라는 용어로 정의하였다. ( )안에 들어갈 용어는?
정답: 프로토콜
기술적 은어 = 프로토콜
7. 다음 아래 제어 흐름 그래프가 분기 커버리지를 만족하기 위한 테스팅 순서를 쓰시오.
정답: 1234561, 124567 또는 1234567, 124561
분기 커버리지는 모든 분기에 대해서, 최소 한 번씩 True와 False 양쪽을 다 수행해야 합니다.
8. 다음 조건을 만족하면서, 과목별 점수의 평균이 90이 상인 과목이름, 최소점수, 최대점수를 구하는 SQL문을 작성하시오.
- 대소문자를 구분하지 않는다.
- WHERE 구분을 사용하지 않는다.
- GROUP BY, HAVING구문을 반드시 사용한다.
- 세미콜론(;)은 생략 가능하다.
- 별칭(AS)을 사용해야 한다.
정답: SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;
결과표 잘못되었음.
9. 학생 테이블에서 이름이 민수인 튜플을 삭제하는 SQL문을 작성하시오
DELETE FROM 학생 WHERE 이름 = '민수';
10. 릴레이션 A, B가 있을 때 릴레이션 B 조건에 맞는 것들만 릴레이션 A에서 튜플을 꺼내 프로젝션하는 관계대수의 기호는 무엇인가?
정답: ÷
순수관계연산자는 셀렉트(σ) / 프로젝트(π) / 조인(⋈) / 디비전(÷) 이 있습니다.

11. 다음 중 헝가리안 표기법(Hungarian Notation)에 대해서 서술하시오.
정답: 식별자 표기 시 접두어에 자료형을 붙이는 표기법
헝데표를 아세요~~? (헝가리안표기법은 데이터타입을붙이는 표기법이다)
[예시]
정수 변수: intAge, nCount, iIndex
문자열 변수: strName, szMessage, sLastName
실수 변수: dblPrice, fValue, dTotalAmount
불리언 변수: bEnabled, blVisible, fIsReady
12. 테스트의 종류 중, 동치 분할 테스트, 경계값 분석 테스트 등의 종류가 있는 테스트 기법을 쓰시오.
정답: 블랙박스 테스트 (명세 기반 테스트)
동경원오비
13. 다음은 C언어 소스 코드이다. 출력 결과를 쓰시오.
#include <studio.h>
int r1(){
return 4;
}
int r10(){
return (30+r1());
}
int r100(){
return (200+r10());
}
int main(){
printf("%dn", r100());
return 0;
}
정답: 234
r1 = 4
r10 = (30+4) = 34
r100 = (200+34) = 234
234
14. 데이터베이스에서 스키마(Schema)에 대해 간략히 설명하시오.
데이터베이스의 전체적인 구조와 제약조건에 대한 명세로, 내부 스키마와 개념 스키마, 외부 스키마로 나뉜다.
구제명: 구조, 제약조건, 명세
15. 다음은 자바(Java) 코드이다. 출력 결과를 쓰시오.
abstract class vehicle{
private String name;
abstract public String getName(String val);
public String getName(){
return "vehicle name:" + name;
}
public void setName(String val){
name = val;
}
}
class Car extends Vehicle{
public Car(String val){
setName(val);
}
public String getName(String val){
return "Car name : " + val;
}
public String getName(byte val[]){
return "Car name : " + val;
}
}
public class good {
public Static void main(String[] args){
Vehicle obj = new Car("Spark");
System.out.print(obj.getName());
}
}
정답: vehicle name : Spark
해석 : obj.getName()가 파라미터가 한 개인게 Car에 없어서 vheicle의 getName()의 실행
1.Vehicle obj = new Car("Spark");
Car 클래스 호출 (Vehicle을 확장하고 있는 클래스)
2.Car extend Vehicle
public Car(String val){ setName(val); }
Car 클래스 안에 Car 메소드에 val(=Spark)값이 들어감
setName은 부모 클래스인 Vehicle 클래스에 있는 메소드인데 extends Vehicle 때문에 Car 클래스에서 부모 클래스의 메소드를 그대로 쓸 수 있음
3. Vehicle
3-1. public void setName(String val){ name = val; }
2번에서 setName(val) 호출할 때 Vehicle의 setName 수행되면서 Vehicle 에서만 쓸 수 있는 private String 객체인 name 값에 val(=Spark)가 담겨짐
private String name (name = Spark)
여기까지가 Vehicle obj = new Car("Spark"); 실행했을 때의 결과임
4. System.out.println(obj.getName());
obj는 Car 클래스이다
Car 클래스 내에는 getName() 이라는, ()를 매개변수로 받는 메소드는 없고, 부모 클래스에 해당 메소드가 존재하므로, “부모 클래스(Vehicle)”에 있는 getName()이 실행된다.
4-1. public String getName(){ return "vehicle name:" + name; }
name : 위에 3-1에서 private String name에 Spark가 들어가 있다
==> 반환값은 “vehicle name:” + name(=Spark);가 된다
5. 결과
System.out.print(obj.getName());
vehicle name:Spark
16. UI 설계 원칙 중 직관성에 대해 설명하시오.
정답: 누구나 쉽게 이해하고, 쉽게 사용할 수 있어야 한다는 원칙
UI 설계 원칙(직유학유)
직관성(Intuitiveness) : 누구나 쉽게 이해하고, 쉽게 사용할 수 있어야 한다.
유효성(Efficiency) : 사용자의 목표가 달성 될 수 있도록 제작한다.
학습성(Learnability) : 모두가 쉽게 배우고 사용할 수 있어야 한다.
유연성(Flexibility) : 사용자의 인터랙션을 최대한 포용하고, 실수를 방지할 수 있도록 제작
17. 다음은 자바(Java) 코드이다. 출력 결과를 쓰시오.
public class Test{
public static void main(String []args){
int i=0;
int sum=0;
while (i<10){
i++;
if(i%2==1)
continue;
sum += i;
}
System.out.print(sum);
}
}
정답: 30
if(i%2==1) continue; : 만약 i가 홀수이면 다음 반복으로 건너뜁니다.
0 + 2 + 4 + 6+ 8 + 10 = 30
18. EAI 유형에는 메세지 버스(Message bus) 유형, 하이브리드(Hybrid) 유형, ( A ) 유형, ( B ) 유형이 있다. 괄호안에 들어갈 말을 적으시오.
정답:
A. 포인트 투 포인트(Point-to-point)
B. 허브 앤 스포크(Hub & Spoke)
포인트 투 포인트
허브앤 스포크
메세지 버스
하이브리드
포허메하 : EAI 종류
19. C++에서 생성자란 무엇인지 쓰시오.
정답: 해당 클래스의 객체가 생성될 때 자동으로 호출되는 특수한 종류의 메서드
생성자는 객체가 생성될 때 자동으로 호출
소멸자는 객체의 수명이 끝나면 호출
20. 학생 테이블에 주소 속성을 추가하는 SQL문을 작성하려고 한다. 빈 칸을 채우시오.
( A ) TABLE 학생 ( B ) 주소 VARCHAR(20);
A. ALTER
B. ADD
CREATE AlTER DROP
SELECT INSERT UPDATE DELETE
COMMIT ROLLBACK GRANT REVOKE