📝 정보처리기사 실기 기출문제 (2020~2026)

📊 총 400문제 (20회차) 🗓️ 2회 실기: 7/19 ✅ 진행률: 0%

원문 링크

안녕하세요. 2026년 1회 정보처리기사 실기 기출문제를 정리해보았습니다.

해당 복원된 기출문제가 많은 분들에게 도움이 되었으면 좋겠습니다.

정보처리기사 개편안인 2020년 시험부터 기출문제를 정리하였습니다.

[2026년 1회] 정보처리기사 실기 복원 문제

1. 다음은 C언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.****

#include <stdio.h>    double arr1(int p[], int len) {
double av = 0;
int i;
for (i = 0; i < len; i++) {
av += (double) p[i];
}
return av / len;
}
  double arr2(int \* p, int len) {
double av = 0;
int i;
for (i = 0; i < len; i++) {
av += (double)( \* (p + i));
}
return av / len;
}
  int main() {
int arr[10] = {
80,  20,  50,  55,  45,  95,  55,  10,  40,  80  };
int len = 10;
  printf("%.2f", arr1(arr, len) + arr2(arr, len));
  return 0;
}

106.00

> 해설:

> 이 코드는 arr1 함수와 arr2 함수를 통해 배열 요소의 평균을 구합니다.

> [코드 흐름 추적]

> 1. main 함수에서 정수형 배열 arr이 선언되고, 크기 len이 10으로 초기화됩니다.

> - arr = {80, 20, 50, 55, 45, 95, 55, 10, 40, 80}

> 2. printf 내에서 arr1(arr, len) + arr2(arr, len)이 호출됩니다.

> 3. arr1(arr, 10) 실행:

> - av = 0으로 초기화.

> - for 루프가 i=0부터 i=9까지 반복되며 배열 인덱스 접근 p[i]를 통해 각 요소를 av에 더합니다.

> - 반복 종료 후 av = 80 + 20 + ... + 80 = 530.0

> - av / len = 530.0 / 10 = 53.0 반환.

> 4. arr2(arr, 10) 실행:

> - av = 0으로 초기화.

> - for 루프가 i=0부터 i=9까지 반복되며 포인터 연산 *(p + i)를 통해 배열 각 요소를 av에 더합니다.

> - 반복 종료 후 av = 530.0

> - av / len = 530.0 / 10 = 53.0 반환.

> 5. 두 함수의 반환값을 더함: 53.0 + 53.0 = 106.0

> 6. %.2f 서식 지정자에 의해 소수점 둘째 자리까지 출력되어 106.00이 출력됩니다.

2. 다음 설명에 해당하는 디자인 패턴의 유형을 괄호( ) 안에 쓰시오.

• ( ㄱ ) 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 연결

• ( ㄴ ) 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존

ㄱ. Bridge

ㄴ. Observer

> 해설:

> - Bridge (브리지) 패턴: 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴으로, 기능의 클래스 계층과 구현의 클래스 계층을 연결합니다.

> - Observer (옵서버) 패턴: 한 객체의 상태가 변하면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 1대 다의 의존성을 가지는 패턴입니다.

3. 데이터베이스(DB) 설계 절차를 순서대로 나타낸 것이다. 각 빈칸에 들어갈 알맞은 용어를 쓰시오.

문제 이미지

ㄱ.요구사항 분석

ㄴ.개념적 설계

ㄷ.논리적 설계

ㄹ.물리적 설계

ㅁ.구현

> 해설:

> 데이터베이스 설계 순서는 다음과 같습니다.

> 1. 요구사항 분석: 사용자의 요구조건을 수집하고 분석합니다.

> 2. 개념적 설계: 개념적 데이터 모델(E-R 모델)을 생성합니다.

> 3. 논리적 설계: 특정 DBMS가 지원하는 논리적 데이터 모델로 변환(매핑)합니다.

> 4. 물리적 설계: 데이터를 물리적 저장 장치에 저장할 수 있도록 물리적 구조를 설계합니다.

> 5. 구현: DDL을 이용하여 데이터베이스를 실제로 생성합니다.

4. 다음은 비기능적 요구사항에 대한 설명이다. 각 항목이 의미하는 요구사항 유형을 보기에서 골라 쓰시오.

1. 시스템 운영 중 로그 관리 및 모니터링 기능을 제공해야 한다.

2. 시스템 운영 시 최소 메모리 용량을 확보해야 하며, 자원 사용량은 제한 범위 내에 있어야 한다.

3. 사용자 요청에 대한 응답 시간은 최대 1분을 초과하지 않아야 한다.

보기

신뢰성, 가용성, 운영, 유지보수성, 자원, 성능, 이식성 ,보안, 품질

1. 운영

2. 자원

3. 성능

> 해설:

> 비기능적 요구사항은 시스템이 어떻게 동작해야 하는지를 정의합니다.

> 1. 운영 요구사항: 시스템 운영, 로그 관리, 모니터링 등 시스템 관리에 대한 요구사항입니다.

> 2. 자원 요구사항: 메모리 용량, CPU 사용량 등 시스템이 차지하는 시스템 자원에 대한 제약입니다.

> 3. 성능 요구사항: 응답 시간, 처리량 등 시스템의 성능 지표에 대한 요구사항입니다.

5. 다음 용어의 영문 약자를 쓰시오.

* 정보보호 관리체계

ISMS

> 해설:

> ISMS (Information Security Management System): 정보보호 관리체계로, 기업이나 기관이 정보 자산을 안전하게 보호하기 위해 수립, 관리, 운영하는 종합적인 체계를 의미합니다. 한국인터넷진흥원(KISA) 등에서 인증을 부여합니다.

6. HDLC는 비트 중심의 데이터 링크 제어 프로토콜로, 프레임 단위로 데이터를 전송하며 흐름 제어 및 오류 복구 기능을 제공한다. 다음 설명을 읽고 알맞은 용어를 쓰시오.

HDLC 구성 요소

1. HDLC 프레임의 구성 단위로, 실제 사용자 데이터를 전송하는 프레임

2. 데이터 링크의 흐름을 관리하고 오류 제어 및 통신 상태를 감시하는 프레임

3. 순서 번호 없이 링크 설정, 해제, 모드 설정 등 제어 기능을 수행하는 프레임

4. 두 국(Station)이 동등한 위치에서 서로 명령과 응답을 주고받는 모드

5. 종국(Secondary)이 주국(Primary)의 허가 없이도 자발적으로 응답을 전송할 수 있는 모드

1. 정보

2. 감독

3. 비번호

4. 비동기 균형 모드

5. 비동기 응답 모드

> 해설:

> HDLC 프레임은 제어부(Control Field)의 형식에 따라 세 가지로 분류됩니다.

> - 정보 프레임 (I-frame): 사용자 데이터 전송. 피기배킹 기법을 통해 확인 응답도 함께 보낼 수 있습니다.

> - 감독 프레임 (S-frame): 흐름 제어 및 오류 제어.

> - 비번호 프레임 (U-frame): 링크의 설정과 해제 등 제어 기능.

>

> 데이터 전송 동작 모드는 다음과 같습니다.

> - 비동기 균형 모드 (ABM): 양쪽 스테이션이 모두 주/종국 역할을 하며 동등한 권한을 가집니다.

> - 비동기 응답 모드 (ARM): 종국이 주국의 허락 없이 자발적으로 데이터 전송을 시작할 수 있습니다.

7. 다음은 Java 코드에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.****

class A {
String f(Object x) {
return "1";
}
  String g() {
return f("a");
}
}
  class B extends A {
String f(Object x) {
return "2";
}
  String f(String x) {
return "3";
}
}
  public class Main {
public static void main(String[] args) {
A a = new B();
System.out.println(a.g());
}
}

2

> 해설:

> [코드 흐름 추적]

> 1. main 함수에서 A a = new B(); 실행:

> - a는 부모 클래스 A 타입의 참조 변수이지만, 실제 생성된 객체는 자식 클래스 B의 인스턴스입니다. (업캐스팅)

> 2. System.out.println(a.g()); 실행:

> - a를 통해 g() 메서드를 호출합니다.

> - B 클래스에는 g()가 오버라이딩되어 있지 않으므로, 부모 클래스 Ag() 메서드가 실행됩니다.

> 3. A 클래스의 g() 내부에서 return f("a"); 실행:

> - f("a")를 호출할 때, 매개변수 "a"는 String 타입입니다.

> - 하지만 컴파일 시점에서는 이 코드가 작성된 클래스 A의 관점에서 메서드를 탐색하므로, 시그니처가 f(Object x)인 메서드가 호출 대상으로 결정됩니다.

> 4. 동적 바인딩(Dynamic Binding) 적용:

> - 런타임 시 실제 객체가 B의 인스턴스이므로, 오버라이딩된 메서드가 있는지 확인합니다.

> - B 클래스에는 부모의 f(Object x)를 오버라이딩한 f(Object x) (return "2";) 가 존재합니다. (참고: B 클래스의 f(String x)는 오버라이딩이 아니라 새로운 오버로딩 메서드입니다. Af(String x)가 없기 때문에 오버라이딩의 대상이 아닙니다.)

> - 따라서 B 클래스의 f(Object x)가 실행됩니다.

> 5. "2"가 반환되고, System.out.println에 의해 "2"가 출력됩니다.

8. 아래 파이썬 코드가 있다. 입력값으로 HumanDev를 주었을 때 출력되는 결과를 쓰시오.

i = input()  x = []    for word in i.split():  x.append(word)    y = ''.join(x)  z = ''.join(c for c in y[::-1] if c not in 'ong')    print(z)

veDamuH

> 해설:

> 1. i = "HumanDev"

> 2. i.split()은 공백을 기준으로 문자열을 나누어 리스트를 반환합니다. x = ['HumanDev']가 됩니다.

> 3. y = ''.join(x)는 리스트 x의 요소들을 빈 문자열로 연결하므로 y = "HumanDev"가 됩니다.

> 4. y[::-1]은 문자열을 역순으로 뒤집은 "veDnamuH"입니다.

> 5. c for c in y[::-1] if c not in 'ong' 조건은 문자 'o', 'n', 'g'가 아닌 문자만 추출합니다. "veDnamuH" 중 'n'이 제외되어 리스트 ['v', 'e', 'D', 'a', 'm', 'u', 'H']가 됩니다.

> 6. 이를 빈 문자열로 결합하면 "veDamuH"가 됩니다.

**9. 아래 조건을 참고하여 각 SQL 구문을 실행했을 때 반환되는 행(Row)의 수를 쓰시오.

(단, DEPT 칼럼은 학과명이다.)**

테이블 조건

STUDENT 테이블에는 다음 세 학과의 학생 정보가 저장되어 있다.

컴퓨터과  50명  · 인터넷과  100명  · 사무자동화과  50

SQL 구문

1. SELECT DEPT FROM STUDENT;

2. SELECT DISTINCT DEPT FROM STUDENT;

3. SELECT COUNT(DISTINCT DEPT) FROM STUDENT

    WHERE DEPT = '컴퓨터과';

1. 200

2. 3

3. 1

> 해설:

> STUDENT 테이블에는 총 200명(50+100+50)의 학생 데이터가 있습니다.

> 1. SELECT DEPT FROM STUDENT;는 중복 제거 없이 모든 행의 DEPT 칼럼을 조회하므로 총 학생 수인 200이 반환됩니다.

> 2. SELECT DISTINCT DEPT FROM STUDENT;는 DEPT 칼럼의 중복을 제거한 고유한 값(컴퓨터과, 인터넷과, 사무자동화과)만 조회하므로 3이 반환됩니다.

> 3. WHERE DEPT = '컴퓨터과' 조건에 의해 필터링된 행들의 고유한 DEPT 수는 '컴퓨터과' 1개뿐이므로 1이 반환됩니다.

10. 아래는 선수(PLAYER) 정보를 관리하는 테이블을 정의하는 SQL 문이다. 팀(TEAM) 테이블의 특정 칼럼을 참조하는 외래키 제약 조건을 추가하려 할 때, 괄호 ①~⑤에 들어갈 적절한 예약어(keyword) 또는 칼럼명을 아래 조건을 참고하여 쓰시오.

조건

외래키 제약 조건의 이름은 TEAM\_TF 로 지정한다.

PLAYER 테이블의 TEAM\_ID 칼럼이 외래키 역할을 한다.

TEAM 테이블의 TEAM\_ID2 칼럼을 참조 대상으로 한다.

SQL 문

CREATE TABLE PLAYER (

  PLAYER\_ID  CHAR(7)     NOT NULL,

  PLAYER\_NAME VARCHAR2(20) NOT NULL,

  TEAM\_ID   CHAR(3)     NOT NULL,

  PRIMARY KEY (PLAYER\_ID),

  ( 1 ) TEAM\_TF

  ( 2 ) KEY ( 3 )

  ( 4 ) TEAM ( 5 )

);

1. CONSTRAINT

2. FOREIGN

3. TEAM\_ID

4. REFERENCES

5. TEAM\_ID2

> 해설:

> 외래키(Foreign Key) 제약조건을 정의하는 SQL 문법은 다음과 같습니다.

> `sql

> CONSTRAINT 제약조건명

> FOREIGN KEY (외래키_칼럼명)

> REFERENCES 참조할_테이블명(참조할_칼럼명)

> `

> 조건에 따라 CONSTRAINT TEAM_TF FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID2)가 됩니다.

11. 두 호스트 a, b의 IP 주소와 서브넷 마스크가 주어졌을 때, 각 호스트가 속한 네트워크 주소를 CIDR 표기법으로 쓰시오.

조건

· 호스트 a의 IP 주소: 192.168.11.20

· 호스트 b의 IP 주소: 192.168.12.200

· 서브넷 마스크: 255.255.254.0

구하는 것

a. 호스트 a (192.168.11.20) 가 속한 네트워크 주소

b. 호스트 b (192.168.12.200) 가 속한 네트워크 주소

a. 192.168.10.0/23

b. 192.168.12.0/23

> 해설:

> 서브넷 마스크 255.255.254.0은 이진수로 11111111.11111111.11111110.00000000입니다. 즉, 23비트의 네트워크 프리픽스를 가집니다 (/23).

> 네트워크 주소는 IP 주소와 서브넷 마스크를 AND 연산하여 구합니다.

> - 호스트 a (192.168.11.20): 11은 이진수로 00001011입니다. 서브넷 마스크 254 (11111110)와 AND 연산하면 00001010 (10)이 됩니다. 따라서 네트워크 주소는 192.168.10.0/23입니다.

> - 호스트 b (192.168.12.200): 12는 이진수로 00001100입니다. 서브넷 마스크 254 (11111110)와 AND 연산하면 00001100 (12)가 됩니다. 따라서 네트워크 주소는 192.168.12.0/23입니다.

12. 다음은 C언어에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.****

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 struct fns { int\* (\*fn)(int\*); } mine; int\* dummy(int \*d) { return d + 1; } int main() { struct fns mine; int n[] = {16, 32}; mine.fn = dummy; printf("%x", \*mine.fn(n)); return 0; } [cs](http://colorscripter.com/info#e)

20

> 해설:

> struct fnsint *를 반환하고 매개변수로 int *를 받는 함수 포인터 fn을 멤버로 가집니다.

> [코드 흐름 추적]

> 1. main 함수에서 struct fns mine;int n[] = {16, 32};를 선언합니다.

> 2. mine.fn = dummy;를 통해 구조체 멤버 fndummy 함수의 시작 주소를 할당합니다.

> 3. printf("%x", *mine.fn(n)); 실행:

> - mine.fn(n)을 호출합니다. 여기서 n은 배열의 이름이므로 배열의 첫 번째 요소의 주소(&n[0])를 의미합니다.

> - dummy 함수 내부: 매개변수 d&n[0]을 가리킵니다.

> - return d + 1;을 실행하면, 포인터 연산에 의해 int 자료형 크기만큼 주소가 증가하여 &n[1] (두 번째 요소의 주소)가 반환됩니다.

> 4. 반환된 주소를 역참조(*)합니다: *(&n[1])n[1]의 값인 32가 됩니다.

> 5. printf에서 %x 포맷 지정자를 사용하여 32를 16진수로 출력합니다. 32를 16진수로 변환하면 20입니다.

> 6. 출력 결과로 20이 나옵니다.

13. 다음은 파이썬에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.****

1 2 3 4 lst = list(range(10)) for c in lst[::-2]: print(c, end='A') print() [cs](http://colorscripter.com/info#e)

9A7A5A3A1A

> 해설:

> lst = list(range(10))에 의해 lst[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]가 됩니다.

> 슬라이싱 lst[::-2]는 리스트를 역순으로 2칸씩 건너뛰며 요소를 추출하므로 [9, 7, 5, 3, 1]이 됩니다.

> 반복문에서 각 요소를 출력할 때 끝에 'A'를 붙여 출력하므로 9A7A5A3A1A가 출력됩니다. (마지막에도 'A'가 붙고, 이후 빈 print()로 인해 줄바꿈이 됩니다.)

14. 아래 파이썬 코드를 실행했을 때 출력되는 값을 쓰시오.

1 2 3 4 5 6 7 8 def f(a): m = [[x] for x in a] b = m[:] for i in range(len(b) - 1): b[i+1] += b[i] return sum(len(x) for x in m) print(f([1, 2, 3, 4])) [cs](http://colorscripter.com/info#e)

10

> 해설:

> 1. m = [[x] for x in a]에 의해 a = [1, 2, 3, 4]일 때 m[[1], [2], [3], [4]]가 됩니다.

> 2. b = m[:]는 리스트 m의 얕은 복사본을 생성합니다. 리스트의 요소인 내부 리스트는 m과 동일한 객체를 참조합니다.

> 3. for i in range(len(b) - 1): b[i+1] += b[i] 반복문 실행:

> - i=0: b[1] += b[0] -> b[1][2] + [1] = [2, 1]. 내부 객체가 수정되므로 m[1][2, 1]이 됩니다.

> - i=1: b[2] += b[1] -> b[2][3] + [2, 1] = [3, 2, 1]. m[2][3, 2, 1]이 됩니다.

> - i=2: b[3] += b[2] -> b[3][4] + [3, 2, 1] = [4, 3, 2, 1]. m[3][4, 3, 2, 1]이 됩니다.

> 4. m[[1], [2, 1], [3, 2, 1], [4, 3, 2, 1]]이 됩니다. (얕은 복사의 특성)

> 5. sum(len(x) for x in m)은 각 내부 리스트의 길이를 더합니다: 1 + 2 + 3 + 4 = 10이 반환됩니다.

15. 다음은 특정 공격 기법에 대한 설명이다. 아래 내용을 읽고 해당하는 공격 기법을 [보기]에서 골라 쓰시오.

원본 데이터 파일은 별도로 존재하며, 공격자는 해당 파일의 경로를 가리키는 특수 파일을 생성한다. 프로그램이 임시 파일을 생성하는 순간을 틈타 해당 임시 파일을 미리 준비한 특수 파일로 교체한다. 이후 프로그램이 임시 파일의 존재를 확인하면 교체된 파일을 정상으로 인식하고 동작하게 된다.

공격 절차

1. 공격자는 실제 파일이 아닌, 특정 파일의 경로를 참조하는 특수 파일을 미리 준비한다.

2. 프로그램이 임시 파일을 생성하는 시점을 노려 해당 임시 파일을 준비한 특수 파일로 교체한다.

3. 프로그램이 임시 파일의 존재 여부를 확인할 때, 조건에 부합하면 정상으로 판단하고 동작하며 부합하지 않으면 임시 파일을 삭제한다.

[보기]

하드링크 / 심볼릭링크 / 소프트링크 / 정적링크 / 동적링크

심볼릭링크

> 해설:

> 심볼릭 링크 (Symbolic Link): 파일이나 디렉터리의 위치를 가리키는 포인터 역할을 하는 특수 파일입니다.

> 공격자가 프로그램이 생성할 임시 파일의 이름과 동일한 심볼릭 링크 파일을 미리 생성하여 중요한 시스템 파일을 가리키게 하면, 권한이 상승된 상태로 실행되는 프로그램이 해당 파일을 덮어쓰거나 수정할 수 있게 되어 시스템 권한을 탈취하는 등의 공격이 가능합니다. 이를 임시 파일 심볼릭 링크 공격(Symlink Attack)이라고 합니다.

16. 다음은 특정 보안 공격 기법에 대한 설명이다. 해당하는 공격 기법의 명칭을 쓰시오.

공격자는 목표 대상이 업무 또는 관심사로 인해 자주 방문하는 합법적인 웹사이트를 사전에 파악한다.

해당 사이트에 악성코드를 삽입하여 감염시켜 놓고, 피해자가 해당 사이트에 접속하는 순간 피해자의 시스템에 악성 프로그램이 자동으로 설치되도록 유도한다. 공격자는 불특정 다수를 노리는 것이 아니라 특정 조직이나 인물을 겨냥하며, 접속자의 IP나 환경 조건을 확인하여 목표 대상에게만 선택적으로 악성코드가 실행되도록 설계하는 경우도 있다.

피해자는 정상적인 사이트를 방문했을 뿐이므로 감염 사실을 인지하기 어렵다는 특징이 있다.

워터링 홀 (Watering Hole)

> 해설:

> 워터링 홀 (Watering Hole) 공격: 표적 공격의 일종으로, 공격 대상이 자주 방문하는 특정 웹사이트(물웅덩이)를 사전에 파악하여 해당 웹사이트에 악성코드를 심어두고, 표적이 접속할 때 악성코드에 감염되도록 하는 공격 기법입니다.

17.다음은 Java 코드에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.

public class Main {
public static void main(String[] args) {
int x1 = 9;
int x2 = 2;
String x3 = "3";
System.out.println(x1 + x2 + "2" + x3);
}
}

1123

> 해설:

> 자바에서 + 연산자는 피연산자 중 하나라도 문자열이면 문자열 결합 연산을 수행하고, 두 피연산자가 모두 숫자면 산술 덧셈을 수행합니다. 연산은 왼쪽에서 오른쪽으로 진행됩니다.

> [코드 흐름 추적]

> 1. int x1 = 9;, int x2 = 2;, String x3 = "3"; 변수가 초기화됩니다.

> 2. System.out.println(x1 + x2 + "2" + x3); 실행:

> - x1 + x2 평가: 9(int) + 2(int) = 11 (산술 덧셈)

> - 11 + "2" 평가: 11(int) + "2"(String) = "112" (문자열 결합)

> - "112" + x3 평가: "112"(String) + "3"(String) = "1123" (문자열 결합)

> 3. 최종적으로 문자열 "1123"이 생성되고 출력됩니다.

18. 다음은 SQL에 대한 문제이다. 아래 코드를 확인하여 알맞는 출력값을 작성하시오.

문제 이미지

SELECT COUNT(\*)

FROM employee e

JOIN dept d ON e.dep\_id = d.dept\_id

WHERE d.budget > (

    SELECT AVG(budget) FROM dept

);

2

> 해설:

> 1. 서브쿼리 SELECT AVG(budget) FROM dept: 부서(dept) 테이블의 예산(budget) 평균을 계산합니다.

> - (1000 + 2000 + 3000 + 1500) / 4 = 7500 / 4 = 1875

> 2. 메인쿼리 조건 d.budget > 1875: 예산이 1875보다 큰 부서의 직원 수를 찾습니다.

> - 예산이 1875보다 큰 부서는 IT(budget=2000)와 HR(budget=3000)입니다.

> 3. JOIN: employee 테이블과 dept 테이블을 조인하여, 이 부서들에 속한 직원을 찾습니다.

> - IT 부서(dept_id=D2)의 직원: 이영희

> - HR 부서(dept_id=D3)의 직원: 김철수

> - 총 2명의 직원이 해당 조건을 만족하므로 COUNT(*)의 결과는 2가 반환됩니다.

19.다음은 통합 테스트에서 사용되는 더미 모듈에 대한 설명이다. 괄호 안에 들어갈 알맞은 용어를 쓰시오.

( 1 ) 은/는 하위 모듈을 대신하여 단순한 결과값만 반환하도록 임시로 작성된 더미 모듈로, 하향식 통합 테스트 수행 시 필요하다.

( 2 ) 은/는 상위 모듈을 대신하여 하위 모듈의 데이터 입력과 출력을 확인하기 위한 더미 모듈로, 상향식 통합 테스트 수행 시 필요하다.

1. 스텁

2. 드라이버

> 해설:

> - 스텁 (Stub): 하향식 통합 테스트에서 하위 모듈의 역할을 대신하는 더미 모듈로, 제어 모듈이 호출할 때 필요한 단순한 반환값을 제공합니다.

> - 드라이버 (Driver): 상향식 통합 테스트에서 상위 모듈의 역할을 대신하는 더미 프로그램으로, 테스트 대상 모듈에 데이터를 전달하고 결과를 확인합니다.

20. 다음은 응집도의 유형에 대한 설명이다. 괄호 안에 들어갈 알맞은 용어를 쓰시오.

( 1 ) 은/는 모듈이 다수의 관련 기능을 가질 때, 모듈 안의 구성요소들이 그 기능을 순차적으로 수행하는 경우의 응집도이다.

( 2 ) 은/는 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 활동들이 모여 있는 경우의 응집도이다.

( 3 ) 은/는 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도이다.

1. 절차

2. 교환

3. 기능

> 해설:

> 응집도(Cohesion)의 종류는 약한 응집도부터 강한 응집도 순으로 우연적 < 논리적 < 시간적 < 절차적 < 교환적(통신적) < 순차적 < 기능적 응집도가 있습니다.

> 1. 절차적(Procedural) 응집도: 모듈 내의 구성요소들이 그 기능을 순차적으로 수행하는 경우입니다.

> 2. 교환적(Communication, 통신적) 응집도: 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성요소들이 모인 경우입니다.

> 3. 기능적(Functional) 응집도: 모듈 내의 모든 요소가 단일 기능을 수행하기 위해 밀접하게 연관되어 있는 가장 이상적인 응집도입니다.

---