141. 다음은 C++ 코드이다. 출력결과를 쓰시오.
#include <iostream>
int fn1(){
return 5;
}
int fn2(){
return fn1()+20;
}
int fn3(){
return fn1()+fn2();
}
void main(){
std::cout << fn3();
}
정답) 30
참고) 수제비 정보처리기사 실기 10-20페이지
해설) 소스 코드는 main에서 시작하는데, std::cout을 보면 fn3()을 출력하라고 하고 있습니다. fn3()함수는 fn1()+fn2()를 반환해야하는데, 여기서 fn2()는 fn1()+20을 반환합니다. fn1()은 5를 반환하므로 fn2()는 fn1()+20=5+20=25가 됩니다.
fn3()은 fn1()+fn2()를 반환해야 한다고 했는데, fn1()은 5를, fn2()는 25를 반환하므로 fn1()+fn2()=5+25=30이 출력됩니다.
※ return과 출력에 대해서 혼돈하는 경우가 많은데, return은 함수가 종료되었을 때 반환하는 값입니다. 출력은 printf, cout, print 함수를 통해서 수행한다는 점도 꼭 기억하시기 바랍니다!!
142. 다음은 C언어 코드이다. 출력 결과를 쓰시오.
#include <stdio.h>
void main(){
int a[5] = {2, 4, 1, 3, 0};
printf("%d %d", a[a[4]], a[3]+a[1]);
}
정답) 2 7
해설) 배열 인덱스를 통해 나온 값을 인덱스로 넣었을 때 결과를 묻는 문제입니다.
a[4]는 0이므로 a[a[4]]는 a[0]이고, a[0]은 2이므로 printf의 첫 번째 %d는 2가 출력 됩니다.
a[3]는 3이고, a[1]는 4이므로 a[3]+a[1]=3+4=7입니다.
143. 다음은 자바 코드이다. 다음 물음에 답하시오.
class A{
public void fn(){}
}
class B ( ① ) A{ // B는 A를 상속받음
public void fn(){}
}
...(생략)...
(1) 위의 코드에서 ①에 들어가는 키워드는 무엇인가?
(2) 위의 코드의 fn처럼 하위 클래스에서 상위 클래스 메서드를 재정의 할 수 있는 기능을 무엇이라고 하는가?
정답)
(1) extends
(2) 오버라이딩
참고) 수제비 정보처리기사 10-76, 10-77페이지
144. 다음은 비밀키 암호화 알고리즘에 대한 설명이다. 괄호( ) 안에 들어갈 암호화 알고리즘을 쓰시오.
( ① ) : 고급 암호화 표준이라고 불리는 암호 알고리즘이며 블록 크기는 128비트이며, 키 길이에 따라 128비트, 192비트, 256비트로 분류할 수 있고, 암호화와 복호화 과정에서 동일한 키를 사용하는 대칭 키 알고리즘이다. ( ② ) : KISA, ETRI에서 개발하고 TTA에서 인증한 안전성, 신뢰성이 우수한 고속 블록 단위의 128비트 대칭 키 암호화 알고리즘이다. ( ③ ) : 56bit의 키를 이용, 64bit의 평문 블록을 64bit의 암호문 블록으로 만드는 블록 방식의 암호화 알고리즘이다. |
정답)
① AES(Advanced Encryption Standard)
② SEED
③ DES(Data Encryption Standard)
145. 다음은 C++ 코드이다. 출력 결과를 쓰시오.
#include <iostream>
using namespace std;
class A{
public:
A( ){
cout << "A" << endl;
};
A(int a){
cout << "B" << endl;
};
~A( ){
cout << "C" << endl;
};
void fn( ){
cout << "D" << endl;
}
};
void main( ){
A a = A(5);
a.fn( );
}
정답)
B
D
C
해설) 클래스 A가 있는데 메서드로 A(), A(int a)가 있습니다. 클래스명과 동일한 이름을 가진 메서드가 생성자입니다. 그리고 ~가 붙어있으면서 클래스 A와 이름이 동일한 ~A() 메서드가 있는데, 이것은 생성자와 정반대의 기능을 하는 소멸자입니다.
main 함수에서 A a = A(5);라고 되어 있기 때문에 A(int a)라는 생성자를 호출하게 되고, B를 출력하게 됩니다. 그 다음 a.fn()은 A클래스의 fn()메서드를 호출하므로 D가 출력이 됩니다.
main함수가 종료되면 a라는 변수가 사라지게 되는데, 이 때 소멸자가 호출이 됩니다. 소멸자가 호출이 되면 ~A()가 불리고, C가 호출되면서 프로그램이 종료하게 됩니다.
생성자는 주로 클래스 내의 변수들을 초기화, 동적 메모리 할당 등을 할 때 사용하고, 소멸자는 주로 클래스 내의 동적할당 되어 있는 메모리들을 해제시킬 때 사용합니다.
145. 다음은 C++ 코드이다. 출력 결과를 쓰시오.
#include <iostream>
using namespace std;
class A{
public:
A( ){
cout << "A" << endl;
};
A(int a){
cout << "B" << endl;
};
~A( ){
cout << "C" << endl;
};
void fn( ){
cout << "D" << endl;
}
};
void main( ){
A *a = new A(5);
a->fn();
}
정답)
B
D
해설)
A a = A(5);와 A* a = new A(5);의 차이를 알고 계시라고 낸 문제입니다.
int a;라고 하면 정수형 변수를 저장할 수 있는 a라는 이름의 변수가 만들어집니다.
int *a;라고 하면 정수형 포인터를 가리키는 a라는 이름의 포인터 변수가 만들어집니다.
마찬가지로 A a;라고 하면 A클래스를 저장할 수 있는 a라는 이름의 변수가 만들어집니다.
다시 돌아와서 A *a라고 하면 A 클래스를 저장하고 있는 공간을 가리키는 a라는 이름의 포인터 변수가 만들어집니다.
A *a = new A(5);에 대해서 다시 설명을 하면 new A(5);라는 것은 메모리 어딘가에 A클래스에 해당하는 내용(정확히는 인스턴스라고 표현)을 할당합니다. 이 내용의 주소 값을 A *a를 통해 a라는 변수에 저장합니다. 즉, new A(5)로 만들어진 메모리 공간의 주소를 a가 가지고 있는 것입니다.
어쨌든 포인터로 선언하면 new가 선언될 때 생성자가 호출됩니다.
그리고 포인터 변수에 new를 했으면 delete를 해주어야 메모리가 해제됩니다. 해당 코드에서는 delete를 따로 안해주었기 때문에 프로그램이 종료해도 메모리는 할당된 상태가 됩니다.(이걸 메모리 누수라고 합니다.)
만약 코드에서 delete a; 문장이 있었다면 소멸자가 생성되어 어제 데일리 문제 값과 동일하게 나오게 됩니다.
추가로 어제 데일리 문제처럼 일반 변수일 때는 a.fn()으로 메서드 접근을 하고, 오늘 데일리 문제처럼 포인터 변수일 때는 a->fn()으로 메서드 접근을 합니다.
어제와 동일한 결과를 내려면 main 함수가 다음과 같아야 합니다.
void main( ){
A *a = new A(5);
a->fn();
delete a; ///// delete를 해주면 소멸자가 호출됩니다.
}
147. 다음은 파이썬 코드이다. 생성자(①)와 소멸자(파괴자)(②) 키워드를 쓰시오
class A:
def __init__(self):
print("생성자")
def __del__(self):
print("소멸자")
a = A()
del a
정답)
① __init__
② __del__
해설) 145, 146번 문제에서는 C++의 생성자/소멸자라면 이번에는 파이썬의 생성자/소멸자입니다.
C++과 기능은 똑같은데, 키워드가 다르다는 것을 확인해두시면 좋을 것 같습니다.
문법은 다음과 같습니다.(참고로 파이썬은 매개변수로 무조건 self를 선언해 주어야 합니다.
구분 | 문법 |
생성자 | class 클래스명: def __init__(self): 명령어 |
소멸자(파괴자) | class 클래스명: def __del__(self): 명령어 |
추가로 출력 결과는
생성자
소멸자
148. 다음은 소프트웨어 테스트의 원리중 하나이다. 괄호안에 들어갈 내용으로 가장 알맞은 용어를 쓰시오.
( ① ) | 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함 테스트 케이스의 정기적 리뷰와 개선 및 다른 시각에서의 접근이 필요 |
|
( ② ) | 요구사항을 충족시켜 주지 못한다면 결함이 없다고 해도 품질이 높다고 볼 수 없음 |
답)
① 살충제 패러독스
② 오류-부재의 궤변
정답 및 해설) 소프트웨어 테스트의 원리 7가지는 기억해 두시기 바랄게요
소프트웨어 테스트의 원리는 교재 7-2를 참고해 주세요
149. 다음 SQL문장의 실행 결과에 들어갈 알맞은 용어를 쓰시오.
성적 테이블
학번 | 과목 | 성적 |
1000 | 보안 | A |
1001 | 운영체제 | B |
1002 | 통계 | A+ |
1003 | 암호학 | B+ |
1005 | 알고리즘 | A |
1006 | 보안 | A+ |
SQL문
select 과목 from ( select 과목, count(과목) from 성적 group by 과목 having count(과목) > 1 ) a;
실행결과
과목 |
( ) |
답) 보안
정답 및 해설)
먼저 아래의 쿼리가 실행이 된다.
select 과목, count(과목)
from 성적
group by 과목
having count( 과목) > 1;
-- group by 를 이용하여 과목별로 건수(count)를 집계한 후, 과목의 건수가 1보다 큰 데이터만 추출한다.
MariaDB [test2]> select 과목, count(과목)
-> from 성적
-> group by 과목
-> having count(과목) > 1;
+--------+---------------+
| 과목 | count(과목) |
+--------+---------------+
| 보안 | 2 |
+--------+---------------+
1 row in set (0.00 sec)
위 결과를 다시 select 명령으로 과목만 추출한다.
MariaDB [test2]> select 과목
-> from
-> (
-> select 과목, count(과목)
-> from 성적
-> group by 과목
-> having count( 과목) > 1
-> ) a;
+--------+
| 과목 |
+--------+
| 보안 |
+--------+
1 row in set (0.00 sec)
150. 다음은 UML에 대한 설명이다. 괄호( ) 안에 들어갈 용어를 쓰시오.
- ( ① ) : 동작에 참여하는 객체들이 주고받는 메시지를 표현하고, 메시지뿐만 아니라 객체 간의 연관(관계)까지 표현하는 다이어그램 - ( ② ) : 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지 표현하는 다이어그램 |
정답)
① 커뮤니케이션 다이어그램
② 상태 다이어그램
'개발 > 정보처리기사' 카테고리의 다른 글
[수제비 출처] 정보처리기사 실기 약술형 뽀개기 모음 엑셀 파일 (.xlsx) (0) | 2021.04.19 |
---|---|
[수제비 출처] 2020년 기사 실기 출제예상 문제[Daily 151-157번] (1) | 2021.04.16 |
[수제비 출처] 2020년 기사 실기 출제예상 문제[Daily 131-140번] (0) | 2021.04.16 |
[수제비 출처] 2020년 기사 실기 출제예상 문제[Daily 123-130번] (0) | 2021.04.16 |
[수제비 출처] 2020년 기사 실기 출제예상 문제[Daily 122-101번] (0) | 2020.10.07 |