정보처리기사

[정보처리기사 실기 기출] 2023년 1회

juble 2024. 10. 15. 14:18

1. 다음 설명하는 디자인 패턴(Design Pattern)을 <보기>에서 골라 쓰시오. 

- (      ) 패턴은 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 가상의 대리인 역할의 객체를 제공하는 패턴이다. 
- (      ) 패턴은 기존 코드를 변경하지 않고 새로운 기능을 추가 가능하나 코드의 복잡도가 증가한다. 
Adapter, Bridge, Composite, Decorator, Facade, Proxy
Proxy

 

* 디자인 패턴(Design Pattern)

  • 객체지향 프로그래밍 설계 시 유사한 상황에서 구조적인 문제를 해결할 수 있도록 방안을 제공

[생성 패턴]

  • 객체를 생성하는 것과 관련된 패턴으로, 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하도록 만들어주어 유연성을 높일 수 있고 코드를 유지하기 쉬운 편이다.
  • 객체의 생성과 참조 과정을 추상화함으로써 시스템을 개발할 때 부담을 덜어준다.
  • 클래스나 객체의 생성과 참조과정을 정의하는 패턴
Factory
Method
- 객체를 생성하기 위한 인터페이스를 정의하며 어떤 클래스가 인스턴스화될 것인지는 서브 클래스가 결정하도록 함 
- 객체를 생성하는 인터페이스와 실제 객체를 생성하는 클래스 분리 가능
- Virtual -Constructor(가상 생성자) 패턴이라도고 함
Singleton - 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 한다.
- 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴
Prototype - 원본 객체를 복제하여 객체를 생성하는 패턴
- 일반적인 방법으로 객체를 생성하고 비용이 많이 소요되는 경우에 주로 사용
Builder 작게 분리된 인스턴스를 조립하듯 조합하여 객체를 생성
Abstract
Factory
- 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
- 관련된 서브 클래스를 그룹지어 한 번에 교체할 수 있음
 

 

[구조 패턴]

  • 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
  • 복잡한 형태의 구조를 갖는 시스템을 개발하기 쉽게 만들어주는 패턴
  • 새로운 기능을 가진 복합 객체를 효과적으로 작성할 수 있다.
    • ex) 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴. 프로그램 내의 자료구조나 인터페이스 구조 등을 설계하는데 많이 활용
Composite 여러 개로 객체로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별없이 다루게 해주는 패턴
Adapter 호환성이 없는 인터페이스 때문에 함께 사용할 수 없는 (기존)클래스를 개조하여 함께 작동할 수 있도록 해주는 패턴
Bridge 기능 클래스 계층과 구현 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 각자 독립적으로 변형할 수 있도록 해주는 패턴
Decorator 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주는 해턴
Facade - '건물의 (앞쪽)정면'
- Facade 인터페이스를 제공하여 facade 객체를 통해서만 모든 관계가 이루어질 수 있도록 인터페이스를 단순화 
- 클래스 간 의존 관계가 줄어들고 복잡성이 낮아지는 효과
Flyweight 인스턴스가 필요할 때마다 매번 생성하는 것이 아니고 가능한 한 공유해서 사용함으로써 메모리를 절약하는 패턴
Proxy - '대리인'이라는 뜻으로, 뭔가를 대신해서 처리하는 것
- 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴
 

 

[행위 패턴]

  • 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로, 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의한다.
  • 메세지 교환과 관련된 것으로, 객체 간의 행위나 알고리즘 등과 관련된 패턴을 말한다.
Chain of
Responsibility

(책임 연쇄)
- 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
- 요청을 처리할 수 있는 각 객체들이 고리(chain)로 묶여 있어 요청이 해결될 때까지 고리를 따라 책임이 넘어감
Iterator
(반복자)
- 자료 구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴
- 내부 표현 방법의 노출 없이 복합 객체의 원소를 순차적으로 접근할 수 있는 방법 제공 
Command
(명령)
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴
- 요청에 사용되는 각종 명령어들을 추상 클래스와 구체 클래스로 분리하여 단순화함
Interpreter
(해석자)
- 언어의 문법 표현을 정의하는 패턴
- SQL 이나 통신 프로토콜과 같은 것을 개발할 때 문법 규칙을 클래스화한 구조
Memento
(기록)
- 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴
- Ctrl+Z와 같은 되돌리기 기능을 개발할 때 주로 이용
Observer
(감시자)
- 한 객체의 상태가 변하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
- 객체 사이에 일대다의 존속성을 정의
State
(상태)
- 객체의 내부 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용하는 패턴, 행위를 변경할 수 있게 함
- 이렇게 하면 객체는 마치 클래스를 바꾸는 것처럼 보인다. 
Strategy
(전략)
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
- 클라이언트는 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능함
- 즉, 클라이언트에게 알고리즘이 사용하는 데이터나 그 구조를 숨겨주는 역할을 한다.
Visitor
(방문자)
- 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성하는 패턴
- 즉, 객체 구조의 요소들에 수행할 오퍼레이션을 표현한 패턴
- 분리된 처리 기능은 각 클래스를 방문(visit)하여 수행함
- 오퍼레이션이 처리할 요소의 클래스를 변경하지 않고도 새로운 오퍼레이션을 정의할 수 있게 함
Template
Method
- 상위 클래스에서 골격을 정의하고, 하위 클래스에서 세부 처리를 구체화하는 구조의 패턴
- 유사한 서브 클래스를 묶어 공통된 내용을 상위 클래스에서 정의함으로써 코드의 양 축소, 유지보수 용이
Mediator
(중재자)
- 수많은 객체들 간의 복잡한 상호작용(interface)을 캡슐화 하여 객체로 정의하는 패턴
- 객체 간의 통제와 지시의 역할을 하는 중재자를 두어 객체지향의 목표를 달성하게 해줌
- 객체 사이의 의존성을 줄여 결합도를 감소시킬 수 있음
 

2024.09.23 - [기술 노트] - [Study] 디자인 패턴(Design Pattern)

 

[Study] 디자인 패턴(Design Pattern)

1. 디자인 패턴자주 사용하는 설계 형태를 정형화해서 이를 유형별로 설계 템플릿을 만들어둔 것으로, 소프트웨어 개발 중 나타나는 과제를 해결하기 위한 방법 중 한가지이다.다시 말헤, 모듈

juble00.tistory.com

 

 

2. 다음 공통으로 설명하는 빈칸에 알맞은 용어를 영문 약어로 쓰시오.

- (      )은 '비동기식 자바스크립트 XML'을 의미하는 용어로 클라이언트와 웹 서버 간에 XML 데이터를 내부적으로 통신하는 대화식 웹 애플리케이션의 제작을 위해 사용된다. 
- (      )는 클라이언트의 요청에 의해 웹 서버에서 로딩된 데이터를 웹 브라우저의 페이지에 보여주기 위해 웹 페이지 전체를 '새로고침'할 필요 없이 즉, 새로운 HTML 페이지로 이동할 필요 없이 현재 페이지에서 필요한 일부분만 로딩되도록 하는 웹 개발 기법이다. 
AJAX

 

* AJAX(Asynchronous JavaScrip And XML)

  • 자바스크립트와 XML을 이용하여 비동기식으로 서버와 통신하는 방식의 웹 애플리케이션 제작 기술
  • 비동기식이란 여러 가지 일이 동시적으로 발생한다는 뜻으로, 서버와 통신하는 동안 클라이언트는 다른 작업을 할 수 있음을 의미한다. 
  • 최근에는 XML보다 JSON을 더 많이 사용한다. 
  • AJAX의 동작 방식
    • 요청 : 브라우저는 서버에 정보를 요청한다. (브라우저는 AJAX 요청을 담당하는 XML HttpRequest라는 객체를 구현)
    • 응답 : 서버는 응답으로 데이터(XML, JSON)를 전달한다. 브라우저는 콘텐츠를 처리하여 페이지의 해당 부분에 추가한다. 

 


3. 다음 제어 흐름 그래프에 대한 분기 커버리지(Branch Coverage)를 수행하는 경우의 테스트케이스 경로를 순서대로 나열하시오. 

<제어 흐름 그래프>

답 (1) : 1 - 2 - 3 - 4 - 5 - 6 - 1 
답 (2) : 1 - 2 - 4 - 5 - 6 - 7

 

* 제어 흐름 그래프 : 노드(node)와 간선(dege)으로 제어(실행) 흐름을 표시한 흐름도

* 결정 커버리지(Decision Coverage) = 분기 커버리지(Branch Coverage)

  • IEEE 표준 단위 테스팅의 표준으로 지정된 최소 커버리지로 분기 커버리지는 문장 커버리지를 충분히 포함
  • 화이트박스 테스트 수행 시 시험 대상의 전체 분기 중 각 분기는 테스트에 의해 실행된 것을 측정
  • 프로그램 내의 모든 결정 포인트(분기에 대해 모든 가능한 결과(참, 거짓))를 최소 한 번씩은 실행하는 테스트
결정 커버리지 답(1) 7단계 답(2) 6단계
결정 포인트 X > Y RESULT > 0 X > Y RESULT > 0
방법 1 YES YES NO NO
 1 → 2 → 3 → 4 → 5 → 6 → 1  1 → 2 → 4 → 5 → 6 → 7
방법 2 YES NO NO YES
 1 → 2 → 3 → 4 → 5 → 6 → 7  1 → 2 → 4 → 5 → 6 → 1

 

* 코드 커버리지(Code Coverage)

  • 구문 커버리지 : 코드 구조 내의 모든 구문에 대해 한 번 이상 수행하는 테스트 커버리지
  • 조건 커버리지 : 결정 포인트 내의 모든 개별 조건식에 대해 수행하는 테스트 커버리지
  • 결정 커버리지 : 결정 포인트 내의 모든 분기문에 대해 수행하는 테스트 커버리지를 말한다. 
  • 조건/결정 커버리지 : 결정포인트 T/F, 개별조건식 T/F를 가져야 한다. 
  • 변경/조건 커버리지 : 모든 결정 포인트 내의 개별 조건식은 적어도 한 번 T, F를 가져야 한다. 
  • 다중 조건 커버리지 : 결정 포인트 내 모든 개별 조건식의 가능한 조합을 100% 보장해야 한다. 

 


4. 아래 보기의 <학생> 테이블에서 이름이 '민수'인 학생 튜플을 삭제하는 SQL문을 작성하시오. (단, 다음의 요구사항을 참고하여 작성하시오.)

<요구사항>

1. 이름 속성의 데이터는 문자형이다. 문자형 데이터는 작은 따옴표('')로 표시하시오. 
2. SQL 명령문은 대/소문자를 구분하지 않는다. 
3. SQL 명령문의 종결 문자는 세미콜론(;)은 생략 가능하다. 
4. 실행 결과가 일치하더라도 <요구사항>을 적용하지 않은 SQL 문을 작성하면 오답으로 간주한다. 

 

<학생>

학번 이름 학과 전화번호
2345001 철수 컴퓨터 010-1111-1111
2347003 민수 수학 010-2222-2222
2345005 영희 컴퓨터 010-3333-3333
2349007 민호 통계 010-4444-4444

 

DELETE FROM 학생 WHERE 이름 = '민수';

 

* DELETE(삭제문)

DELETE FROM 테이블_이름
(WHERE 조건);
  • 테이블의 자료(행)을 삭제할 경우 사용하는 명령문이다. 
  • WHERE 절의 조건에 맞는 행만 삭제되며, WHERE절이 생된 경우 모든 행이 삭제되어 빈 테이블이 된다. 

5. <성적> 테이블을 대상으로 <요구사항>을 적용하여 아래 <결과>와 같이 출력하는 SQL문을 작성하시오. 

<성적>

학번 과목번호 과목이름 학점 점수
100 2000 데이터베이스 A 95
101 1000 자료구조 B 80
102 2000 데이터베이스 A 99
103 2000 데이터베이스 B 88
104 1000 자료구조 C 79

 

<결과>

과목이름 최소점수 최대점수
데이터베이스 88 99

 

<요구사항>

1. <성적> 테이블에서 과목별 평균 점수가 90점 이상인 과목이름, 최소점수, 최대점수를 출력하시오. 
2. 단, WHERE 구문은 사용 불가능하며, GROUP BY, HAVING, AS 구문을 반드시 포함하여 작성하시오. 
3. SQL 명령문은 대/소문자를 구분하지 않는다. 
4. SQL 명령문의 종결 문자의 세미콜론(;)은 생략 가능하다. 
5. 실행 결과가 일치하더라도 <요구사항>을 적용하지 않은 SQL문을 작성하면 오답으로 간주한다. 

 

SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름 HAVING AVG(점수) >= 90;

 

* SELECT(검색문)

SELECT (DISTINCT) 속성_이름
FROM 테이블_이름
(WHERE 조건)
(GROUP BY 속성_이름
    (HAVING 그룹조건))
(ORDER BY 속성_이름 (ASC/DESC))
  • DISTINCT : 검색 결과에 중복되는 값이 있는 경우 한 번만 표현하도록 하는 옵션이며, 생략 시 중복된 값이 모두 표시된다. 
  • HAVING 그룹조건 : GROUP BY에 의해 그룹으로 분류를 한 후 조건을 제시할 때 사용된다. 
  • ASC : 오름차순(작은 값에서 큰 값)으로 정렬할 때 사용되는 옵션이다. 기본 옵션이다. 
  • DESC : 내림차순(큰 값에서 작은 값)으로 정렬할 때 사용되는 옵션이다. 

 


6. 다음 공통으로 설명하는 빈칸에 알맞은 용어를 영문 약어로 쓰시오. 

- (      )은 VPN의 터널링 기능을 지원하는 PPTP와 L2F를 통합한 OSI 7의 2계층(데이터 링크 계층) 프로토콜이다. 
- (      )은 일반적으로 데이터의 보안 서비스를 제공하기 위하여 IPSec과 결합하여 사용된다. 

 

L2TP

 

* L2TP(Layer 2 Tunneling Protocol)

  • PPTP(Point-to-Potint Tunneling Protocol)와 L2F(Layer 2 Forwarding Protocol)의 기능을 결합한 VPN에 이용되는 데이터 링크 계층의 암호화 프로토콜이다. 
  • 주요 특징 : 헤드 압축을 지원, 터널 인증을 지원, IPsec을 이용하여 암호화
  • 장점 : 속도가 빠르며 PPTP보다 안전하며 설치가 간단함
  • 단점 : 암호화가 없기에 보안에 취약하며 특정 UDP 포트를 사용하므로 방화벽 설정에 따라 통신이 불가능할 수 있음 

 


7. rlogin, telnet, rsh 프로토콜을 대체하기 위해 설계되었으며 22번 포트를 사용하는 두 호스트 사이를 원격 접속하여 안전하게 메시지를 전송할 수 있게 해주는 보안 프로토콜을 무엇이라 하는지 영문 약어로 쓰시오. 

SSH

 

* SSH(Secure Shell) Protocol

  • LAN 상의 원격 호스트에 보안적으로 안전하게 접속하기 위해 사용되는 인터넷 프로토콜이다. 
  • 기본 포트는 22번을 사용하며 CLI에서 작업을 한다. 
  • 연결 프로토콜은 한 쌍의 KEY를 통해 서버에서 사용자를 인증한다. 

 


8. 다음은 C언어로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오. 

#include <stdio.h>

int main(){
    char a[] = "Art";
    char* p = NULL;
    int i;
    
    p = a;
    
    printf("%s\n", a);
    printf("%c\n", *p);
    printf("%c\n", *a);
    printf("%s\n", p);
    for(i = 0 ; a[i] != '\0'; i++){
    	printf("%c", a[i]);
    }
    return 0;
}
Art
A
A
Art
Art

 

  • 해당 프로그램은 문자열 상수를 1차원 배열과 문자 포인터 변수를 통해 참조하여 출력하는 프로그램이다. 
  • 문자열 상수의 마지막에는 문자열의 끝을 의미하는 '\0'(널문자)이 존재한다. 
  • C언어의 printf() 함수의 출력형식 지정문자 "%c"는 한 문자를 출력하고 "%s"는 전달 받은 주소를 참조하여 '\0'(널문자) 이전까지의 문자열을 연속하여 출력한다. 

 


9. 다음은 C언어로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오.

#include <stdio.h>

int main(){
    char* a = "qwer";
    char* b = "qwaexyz";
    int i, j;
    
    for (i = 0; a[i] != '\0'; i++){
        for(j = 0; b[j] != '\0'; j++){
            if (a[i] == b[j])
                printf("%c", a[i]);
            }
        }
    }
    return 0;
}

 

qwe

 

  • 해당 프로그램은 문자형 포인터 변수가 포인팅하는 "qwer"의 각 요소의 문자들이 문자열 포인터 변수가 포인팅하는 "qwaexyz" 의 문자열 내에 문자로 존재하면 출력하는 프로그램이다. 
  • 즉, a의 'a'가 b의 "qwaexyz" 내에 포함된 문자이면 출력하고 a의 'w'가 "qwaexyz" 내에 포함된 문자이면 출력하는 중첩 for 명령문이다. 
  • a의 'q', 'w', 'e'만 b의 "qwaexyz" 내에 포함되어 있으므로 출력되고 a의 'r'은 포함되어 있지 않으므로 출력되지 않는다. 

 


10. 다음 C언어로 구현된 2진수를 10진수로 변환하는 프로그램에서 빈칸 ①, ②에 들어갈 가장 적합한 명령을 C언어 코드 형식으로 쓰시오. 

#include <stdio.h>

int main(){
    int input = 1010;
    int digit = 1;
    int sum = 0;
    while(1){
        if(input == 0)
            break;
        else {
            sum += (input ①  ②  ) * digit;
            digit *= 2;
            input /= 10;
        }
    }
    printf("%d", sum);
    
    return 0;
}

 

① % , ② 10

 

  • 해당 프로그램은 2진수 1010을 10진수로 변환하여 출력하는 프로그램이다. 
  • 2진수 1010을 10진 정수형 int형 변수 input에 대입한 후 각 자리를 추출하여 각 자리의 가중치 변수 digit를 곱한 항을 10진수 변수 sum에 누적하는 처리 단계를 반복하게 된다. 

 


11. 다음 C언어로 구현된 버블 정렬 프로그램에서 빈칸 ①, ②에 들어갈 가장 적합한 명령을 C언어 코드 형식으로 쓰시오. 

#include <stdio.h>

void swap(int a[], int idx1, int idx2){
    int temp = a[idx1];
    a[idx1] = a[idx2];
    a[ ① ] = temp;
}

void sort(int a[], int len){
    int i, j;
    for(i=0; i<4; i++)
        for(j=0; j<4-i; j++)
            if(a[j] > a[j+1])
                swap(a, j, j+1);
}

int main(){
    int nx = 5;
    int a[] = {6, 5, 8, 9, 4};
    int i;
    sort(a, ② );
    for (i=0; i<5; i++){
        printf("%d ", a[i]);
    }
    return 0;
}
① idx2 , ② nx

 

  • 해당 프로그램은 버블정렬의 오름차순을 구하는 프로그램이다. 
  • main() 함수를 시작으로 sort() 함수 → (교환 필요시) swap() 함수가 호출되는 과정을 거쳐 3개의 함수로 구성된 프로그램이다. 
  • 문제의 빈칸 ①은 main() 함수에서 정렬을 수행하기 위해 main() 함수에서 선언한 정렬의 대상인 1차원 배열 a와 배열의 요소의 개수인 변수 nx(5)를 sort() 함수의 인수로 전달하며 호출한다. 
  • 문제의 빈칸 ②는 sort() 함수에서 배열의 요소 값을 오름차순으로 정렬하는 과정에서 앞과 뒤의 요소를 교환해야 하는 경우에 호출된 swap() 함수에서 진행되는 두 배열의 요소의 교한 3단계 과정의 마지막 명령문으로 idx번째 인덱스의 배열 a의 값을 임시 변수 temp로 대입 처리한다. 

 


12. 다음은 Java로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오. 

class Static {
    public int a = 20;
    static int b = 0;
}

public class Exam {
    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.println(st.a);
    }
}

 

10
11
10
20

 

  • Static 클래스 내의 static 필드 b는 Static 클래스 형으로 생성된 객체들이 공유할 수 있는 필드이므로 객체 st와 같은 인스턴스에 각각 생성되는 필드가 아니다. 
  • static 변수 b는 참조할 때 Static.b 또는 st.b로 표현하여 사용한다. 
  • main() 메소드의 a는 지역변수이며, st.a는 객체의 필드로 다른 변수를 의미한다. 

 


13. 다음은 Java로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오. 

abstract class Vehicle {
    String name;
    abstract public String getName(String val);
    
    public Vehicle(String val) {
        this.name = val;
    }
    public String getName() {
        return "Vehicle name : " + name;
    }
}

class Car extends Vehicle {
    public Car(String val) {
        super(val);
    }
    public String getName(String val) {
        return "Car name : " + val;
    }
    public String getName(byte val[]) {
        return "Car name : " + val;
    }
}

public class Exam {
    public static void main(String[] args) {
        Vehicle obj = new Car("Spark");
        System.out.println(obj.getName());
    }
}

 

Vehicle name : Spark

 

  • Vehicle 클래스는 추상 메소드를 포함하는 추상 클래스로 상속 상황에서의 부모 클래스로 정의되어 있으며, Car 클래스는 Vehicle 클래스를 상속 받는 자식 클래스이며 부모의 추상 메소드를 오버라이딩하여 정의되었다. 
  • main() 메소드에서는 new Car("Spark"); 를 통해 자식 객체를 생성한 후, 매개변수 "Spark"를 갖는 자식 생성자를 자동호출하였다. public Car(String val) 생성자에서는 super(val);를 통해 부모의 매개변수 생성자를 통해 name 멤버의 값을 "Spark"로 초기화하였다. 
  • 생성된 자식 객체는 부모 클래스의 형으로 형 변환되는 업 캐스팅(Up-casting)을 묵시적으로 수행하였다. obj.getName() 을 통해 메소드를 호출하면 상속받은 public String getNAme()을 호출하게 되어 메소드 내부의 "Vehocle name : " + name의 반환문을 수행하게 된다. 
  • 문자열 결합에 의해 "Vehicle name : Spark" 문자열 상수가 반환된 후 main() 메소드 내에서 출력되며 프로그램이 종료된다. 

 


14. 다음은 Java로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오. 

class Parent {
    int x = 100;
    Parent() { 
        this(500);
    }
    Parent(int x) {
        this.x = x;
    }
    int getX() {
        return this.x;
    }
}
class Child extends Parent {
    int x = 1000;
    Child() {
        this(5000);
    }
    Child(int x) {
        this.x = x;
    }
}
public class Exam {
    public static void main(String[] args) {
        Child obj = new Child();
        System.out.println(obj.getX());
    }
}

 

500

 

  • 해당 프로그램은 상속 관계의 자식 클래스에서 부모의 필드명(x)와 동일한 필드를 선언한 이후, 부모 클래스에서 this.x를 식별하여 출력하는 프로그램이다. 
  • new Child() 명령에 의해 자식 객체 obj가 생성되면 부모의 생성자가 먼저 호출되고 자식의 생성자가 자동호출된다. 이때, 부모의 생성자를 호출하여 부모의 필드 x는 100에서 500으로 변경된다. 
  • 이후, 자식의 생성자를 호출하여 자식의 필드 x가 1000에서 5000으로 변경된다. 
  • obj.getX() 메소드는 부모의 this.x를 반환하게 되는데 이때의 this.x는 부모의 필드 x를 식별하여 500을 반환하며 최종 500이 출력된다. 

 


15. 다음은 Python 언어로 작성된 프로그램이다. 이를 실행한 출력 결과를 쓰시오. 

asia = {'한국', '중국', '일본'}
asia.add('베트남')
asia.add('중국')
asia.remove('일본')
asia.update({'홍콩', '한국', '태국'})
print(asia)

 

{'한국', '중국', '베트남', '홍콩', '태국'}

 

  • Python의 자료형 SET은 집합 요소의 중복은 허용하지 않고, 순서는 상관없다. 
  • 채점 기준은 중괄호 {} 속 집합 요소가 문자열이므로 반드시 작은 따옴표 쌍(' ')으로 

 


16. 다음 설명에 해당하는 스키마를 빈칸 ①, ②, ③에 각각 <보기>에서 골라 쓰시오. 

( ① ) 스키마 사용자나 응용 프로그래머가 접근할 수 있는 정의를 기술한다. 
( ② ) 스키마 범 기관적 입장에서 데이터베이스를 정의한 것으로, 개체 간의 관계와 제약 조건을 나타내고, 데이터베이스 접근 권한, 보안 및 무결성 규칙 명세가 있다. 
( ③ ) 스키마 물리적 저장 장치의 입장에서 본 데이터베이스 구조로서 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타낸다. 

 

<보기>

ㄱ. 논리      ㄴ. 물리      ㄷ. 외부      ㄹ. 내부      ㅁ. 개념      ㅂ. 일반      ㅅ. 정적      ㅇ. 동적

 

① ㄷ.외부  , ② ㅁ.개념  , ③ ㄹ.내부

 

* 스키마(Schema)

스키마의 구조

 

  • 스키마는 데이터베이스의 전체적인 구조와 제약조건에 대한 명세를 기술·정의한 것을 말하며, 스킴(Scheme)이라고도 한다. 
  • 스키마의 종류
내부 스키마
(Internal Schema)
- 물리적 저장 장치 관점(기계 관점)에서 본 데이터베이스의 물리적 구조
- 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타낸다. 
개념 스키마
(conceptual Schema)
- 논리적 관점(사용자 관점)에서 본 전체적인 데이터 구조
- 범 기관적 입장에서 데이터베이스를 정의한 것으로, 개체 간의 관계와 제약 조건을 나타내고, 데이터베이스 접근 권한, 보안 및 무결성 규칙 명세가 있다. 
외부 스키마
(External Schema)
- 전체 데이터 중 사용자가 사용하는 한 부분에서 본 논리적 구조를 말하며, 서브 스키마라고도 함 
- 사용자나 응용 프로그래머가 접근할 수 있는 정의를 기술한다. 

 


17. 다음 설명에 해당하는 릴레이션 관련 용어를 빈칸 ①, ②, ③에 각각 <보기>에서 골라 쓰시오. 

( ① )  - 테이블의 행(Row)에 해당하며 파일 구조의 레코드(Record)와 같은 의미이다. 
- 한 릴레이션의 튜플들의 값은 모두 상이하며, 튜플 간 순서가 없다. 
( ② )  - 어느 한 시점에 릴레이션이 포함하고 있는 튜플의 집합이다. 
- 릴레이션의 외연(extension)이며 동적인 성질을 갖는다. 
( ③ )  - 튜플의 개수(기수)이다. 

 

<보기>

ㄱ. 속성      ㄴ. 튜플      ㄷ. 원자값      ㄹ. 디그리      ㅁ. 도메인      ㅂ. 카디널리티      ㅅ. 릴레이션 스킴      ㅇ. 릴레이션 인스턴스

 

① ㄴ.튜플 , ② ㅇ.릴레이션 인스턴스  , ③ ㅂ.카디널리티

 

  • 릴레이션(Relation) : 릴레이션 스팀과 릴레이션 인스턴스로 구성된다. 
  • 릴레이션 스킴(Scheme) : 릴레이션의 구조이다. 
  • 릴레이션 인스턴스(Instance) : 어느 한 시점에 릴레이션이 포함하고 있는 튜플의 집합이다. 
  • 속성(Attribute) : 데이터의 가장 작은 논리적 단위로서 파일 구조상의 데이터 항목 또는 데이터 필드에 해당한다. 
  • 튜플(Tuple) : 테이블의 행(Row)에 해당하며 파일 구조의 레코드(Recode)와 같은 의미이다. 
  • 디그리(Degree) : 속성의 개수이다. 
  • 카디널리티(Cardinality) : 튜플의 개수(기수)이다. 
  • 도메인(Domain) : 속성이 취할 수 있는 값들의 집합이다. 

 


18. 다음은 패킷 교환 방식(Packet Switching)에 대한 설명이다. 빈칸 ①, ②에 알맞은 용어를 각각 쓰시오. 

 패킷 교환 방식(Packet Switching)은 패킷 교환망에서 메시지를 일정한 길이의 전송 단위인 패킷으로 나누어 전송하는 방식이다. 패킷 교환은 저장-전달 방식을 사용한다. 
 패킷 교환의 방식으로는 연결형인 ( ① )과 비연결형인 ( ② )의 두 가지 방식으로 구분된다. 

( ① )은 패킷이 전송되기 전에 논리적인 연결 설정이 이루어져야 한다. 
( ① )은 모든 패킷이 동일한 경로로 전달되므로 항상 보내어진 순서대로 도착이 보장된다. 
( ① )은 연결형 서비스 방식으로 패킷을 전송하기 전에 미리 경로를 설정해야 한다. 

( ② )은 일정 크기의 데이터 단위(packet)로 나누어 특정 경로의 설정 없이 전송되는 방식이며, 각 패킷마다 목적지로 가기 위한 경로 배정이 독립적으로 이루어진다. 

 

① 가상회선(Virtual Circuit) , ② 데이터그램(Datagram)

 

* 패킷 교환 방식(Packet Switching)

  • 메시지를 일정한 길이의 전송 단위인 패킷으로 나누어 전송하는 방식이다. 
  • 다수의 사용자 간에 비대칭적 데이터 전송을 원할하게 하므로 모든 사용자 간에 빠른 응답 시간 제공이 가능하다. 
  • 전송에 실패한 패킷의 경우 재전송이 가능하다. 
  • 패킷 단위로 헤더를 추가하므로 패킷별 오버헤드가 발생한다. 
  • 현재 컴퓨터 네트워크에서 주로 사용하는 방식이며, 패킷교환공중데이터통신망(PSDN)이라고도 한다. 
  • 패킷 교환 방식은 축적 후 전달(Store-and-Forward) 방식이다. 
  • 메시지를 작은 데이터 조각인 패킷으로 블록화한다. 
  • 종류 : 가상 회선 방식, 데이터그램 방식 
가상회선
(Virtual Circuit)
- 연결형 서비스
- 데이터를 패킷 단위로 나누어 전송
- 가상 연결 설정을 통해 전송되는 모든 패킷의 경로가 동일
- 패킷의 도착 순서가 일정(출발/도착 순서 동일)
데이터그램
(Datagram)
- 비연결형 서비스
- 패킷을 독립적으로 전송(서로 다른 경로, 경로를 미리 할당하지 않음)
- 정보의 양이 적거나 상대적으로 신뢰성이 중요하지 않은 환경에서 사용
- 송신 호스트가 전송한 패킷은 보낸 순서와 무관한 순서로 수신(서로 다른 경로, 네트워크 혼잡도에 따라 가변적)

 


19. TCP/IP에서 신뢰성 없는 비연결성 프로토콜인 IP를 대신하여 송신측으로 네트워크의 IP 상태 및 에러 메시지를 전달해주는 프로토콜을 무엇이라고 하는지 영문 약어를 쓰시오. 

ICMP

 

* ICMP(Internet Control Message Protocol)

  • 송신측의 상황과 목적지 노드의 상황을 진단하는 프로토콜
  • IP 프로토콜에서 오류 보고와 오류 수정 기능, 호스트와 관리 질의를 위한 제어 메시지를 관리하는 인터넷 계층(네트워크 계층) 프로토콜이다. 메시지는 하위 계층으로 가기 전에 IP 프로토콜 데이터그램 내에 캡슐화된다. 
  • 호스트 서버와 인터넷 게이트웨이 사이에서 메시지를 제어하고 오류를 알려주는 프로토콜로, ICMP를 사용하는 명령어는 Ping, Tracert, Echo 등이 있다. 

 


20. 다음 설명에 해당하는 용어를 빈칸 ①, ②, ③에 각각 <보기>에서 골라 쓰시오. 

( ① )  컴퓨터의 취약점을 이용하여 네트워크를 통해 다른 프로그램의 감염 없이 자신 혹은 변형된 자신을 복제하여 컴퓨터 시스템에 침입하는 독립적인 프로그램이다. 
( ② )  겉으로 보기에 유용한 정상적인 프로그램인 것 같으나 악성코드를 숨겨두어 시스템을 공격하는 악성 프로그램이다. 
( ③ )  컴퓨터 내부의 정상적인 프로그램에 자신을 복사했다가 그 프로그램이 수행될 때 악성코드로 만들어 프로그램 및 PC의 작동을 방해한다. 

 

<보기>

ㄱ. 님다      ㄴ. 웜      ㄷ. 랜섬웨어      ㄹ. 버퍼 오버플로우      ㅁ. 트로이 목마      ㅂ. 악성 스크립트      ㅅ. 웹 방화벽      ㅇ. 바이러스

 

① ㄴ.웜  , ② ㅁ.트로이 목마  , ③ ㅇ.바이러스

 

님다
(Nimda)
윈도우 계열의 서버를 사용하는 PC를 공격 대상으로 하고 파일을 통해 서버를 감염시킨다.
님다라는 명칭은 관리자를 의미하는 'admin'을 거꾸로 한 것으로 보인다. 

(Worm)
스스로를 복제하는 악성 소프트웨어 컴퓨터 프로그램으로, 바이러스가 다른 실행 프로그램에 기생하여 실행되는 데 반해 웜은 독자적으로 실행되며 다른 실행 프로그램이 필요하지 않다. 
랜섬웨어
(Ransomware)
컴퓨터 시스템을 감염시켜 접근을 제한하고 일종의 몸값을 요구하는 악성 소프트웨어의 한 종류이다. 
버퍼 오버플로우
(Buffer Overflow)
버퍼에 데이터를 쓰는 소프트웨어가 버퍼의 용량을 초과하여 인접한 메모리 위치를 덮어쓸 때 발생하는 비정상적인 현상이다. 
트로이 목마
(Trojan Horse)
악성 루틴이 숨어 있는 프로그램으로, 겉보기에는 정상적인 프로그램으로 보이지만 실행하면 악성 코드를 실행한다. 
악성 스크립트  보안이 취약한 합법적인 웹 사이트에 악성 스크립트를 숨겨 작동하며, 대부분의 사용자들이 이러한 사이트를 신뢰할 수 있는 사이트로 생각하고 사이트 접속 시 별다른 의심을 하지 않기 때문에 악성코드에 감염된다. 
웹 방화벽(WAF,
Web Application Firewall)
일반적인 네트워크 방화벽과는 달리 웹 애플리케이션 보안에 특화되어 개발된 솔루션이다. 
바이러스
(Virus)
다른 독립적 프로그램의 코드 내에 스스로를 주입한 다음, 그 프로그램이 악성 행동을 하고 스스로 확산되도록 강제하는 컴퓨터 코드이다. 

 


해설은 이기적 실기 기본서를 참고하였습니다 :)

728x90
반응형