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)
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
반응형
'정보처리기사' 카테고리의 다른 글
[정보처리기사 실기 기출] 2023년 3회 (15) | 2024.10.16 |
---|---|
[정보처리기사 실기 기출] 2023년 2회 (4) | 2024.10.16 |
[정보처리기사 실기 기출] 2022년 3회 (16) | 2024.10.14 |
[정보처리기사 실기 기출] 2022년 2회 (21) | 2024.10.13 |
[정보처리기사 실기 기출] 2022년 1회 (17) | 2024.10.11 |