20-3
아래 Java 프로그램의 출력 결과를 적으시오.
abstract class Shape {
String label;
abstract String describe(int n);
String describe() {
return "Shape: " + label;
}
void setLabel(String s) {
label = s;
}
}
class Circle extends Shape {
Circle(String s) {
setLabel(s.toUpperCase());
}
String describe(int n) {
return "Circle x" + n;
}
String describe(int[] arr) {
return "Circle arr " + arr;
}
}
public class Main {
public static void main(String[] args) {
Shape sh = new Circle("dot");
System.out.println(sh.describe());
}
}Shape: DOT
[해설]
sh의 선언 타입은 Shape지만 실제 객체는 Circle이다. Circle은 인자 없는 describe()를 재정의하지 않았으므로 부모 Shape의 describe()가 실행된다.
Circle 생성자에서 setLabel("dot".toUpperCase())가 호출되어 label에는 "DOT"이 저장된다. 따라서 "Shape: " + label의 결과인 Shape: DOT가 출력된다.
혼동 주의: describe(int)는 추상 메서드를 구현한 것이고 describe(int[])는 매개변수가 다른 오버로딩이라 인자 없는 호출과 관계없다.
20-3
소프트웨어 형상 관리 활동 중 하나인 형상 통제(Configuration Control)가 무엇인지 서술하시오.
형상 항목의 버전 관리를 위해 변경 요청의 수용 여부를 검토·승인하고 변경 활동을 통제하는 활동이다.
[해설]
형상 통제는 기준선(Baseline)이 정해진 형상 항목의 변경 요청을 검토·승인하고, 승인된 변경만 반영되도록 통제하는 활동이다.
보통 형상 통제 위원회(CCB)가 변경의 타당성과 영향을 심사한다.
형상 관리 절차는 형상 식별 → 형상 통제 → 형상 감사 → 형상 기록(보고) 순으로 진행된다.
20-3
아래 C 프로그램의 실행 결과를 적으시오.
#include <stdio.h>
int main(void) {
int n = 1, p = 0;
do {
n += 2;
p = p * n;
} while (n < 9);
printf("%d %d", n, p);
return 0;
}9 0
[해설]
p가 0으로 초기화되었으므로 어떤 수를 곱해도 계속 0이다.
- 1회: n=3, p=0×3=0
- 2회: n=5, p=0
- 3회: n=7, p=0
- 4회: n=9, p=0 → n < 9가 거짓이라 종료
출력은 9 0이다. 곱셈 누적 변수는 1로 초기화해야 의도대로 곱이 쌓인다.
20-3
어떤 모듈의 제어 흐름 그래프를 노드와 연결 관계로 나타내면 아래 표와 같다.
| 노드 | 내용 | 다음 노드 |
|---|---|---|
| ① | flag = 0 | ② |
| ② | a > b ? | 예 → ③, 아니오 → ④ |
| ③ | flag = 1 | ④ |
| ④ | a = a - 3 | ⑤ |
| ⑤ | CALL calc(a, flag, res) | ⑥ |
| ⑥ | res > 0 ? | 예 → ①, 아니오 → ⑦ |
| ⑦ | PRINT res | 종료 |
분기(결정) 커버리지를 100% 만족하도록 테스트 경로 2개를 노드 번호 순서로 적으시오. (각 경로는 ①에서 시작해 ⑦ 또는 다시 ①로 돌아오는 지점까지 적는다.)
경로 1: ①→②→③→④→⑤→⑥→①
경로 2: ①→②→④→⑤→⑥→⑦
(또는 ①→②→③→④→⑤→⑥→⑦ 과 ①→②→④→⑤→⑥→①)
[해설]
분기 커버리지는 모든 판단 노드의 참과 거짓을 각각 한 번 이상 지나야 한다. 판단 노드는 ②와 ⑥ 두 개다.
- 경로 1: ② 예(③ 경유), ⑥ 예(①로 복귀)
- 경로 2: ② 아니오(③ 건너뜀), ⑥ 아니오(⑦ 출력)
두 경로로 네 개의 분기가 모두 덮인다. ⑥의 예/아니오를 서로 바꾼 조합 ①②③④⑤⑥⑦ / ①②④⑤⑥①도 정답이다.
20-3
식별자 명명 규칙 중 헝가리안 표기법(Hungarian Notation)이 무엇인지 서술하시오.
식별자 이름 앞에 자료형을 나타내는 접두어를 붙이는 표기법이다.
[해설]
헝가리안 표기법은 식별자 이름 앞에 자료형을 나타내는 접두어를 붙이는 명명 규칙이다. 이름만 보고도 자료형을 알 수 있다.
예를 들어 int형은 nCount, 문자열은 szName, bool형은 bFlag처럼 쓴다.
혼동 주의: 카멜 표기법(userName)·파스칼 표기법(UserName)·스네이크 표기법(user_name)은 자료형 표시와 관계없고, 단어를 구분하는 방식만 정한 규칙이다.
20-3
아래 C 프로그램을 실행했을 때 출력되는 값을 적으시오.
#include <stdio.h>
int unit(void) {
return 7;
}
int tens(void) {
return unit() * 3 + 10;
}
int hund(void) {
return 500 + tens() - unit();
}
int main(void) {
printf("%d\n", hund());
return 0;
}524
[해설]
호출은 hund → tens → unit 순으로 들어가고, 반환은 안쪽부터 계산된다.
- unit() = 7
- tens() = 7×3 + 10 = 31
- hund() = 500 + 31 − 7 = 524
따라서 출력은 524다.
20-3
C++ 클래스에서 생성자(Constructor)가 무엇인지 쓰시오.
객체가 생성될 때 자동으로 호출되는 특수한 메서드이다.
[해설]
생성자는 객체 생성 시 자동으로 호출되어 멤버를 초기화하는 특수한 메서드다.
C++에서는 클래스 이름과 같은 이름을 쓰고 반환형이 없다. 매개변수를 달리해 여러 개를 오버로딩할 수 있다.
반대로 객체가 소멸될 때 호출되는 것은 소멸자(~클래스명)다.
20-3
UI 설계 원칙 중 직관성(Intuitiveness)이 무엇인지 쓰시오.
누구나 쉽게 이해하고 쉽게 사용할 수 있어야 한다는 원칙이다.
[해설]
직관성은 사용자가 설명 없이도 쉽게 이해하고 쉽게 사용할 수 있게 하는 원칙이다. 부특성으로 쉬운 검색, 쉬운 사용성, 일관성이 있다.
- 유효성: 사용자의 목적을 정확하고 완벽하게 달성
- 학습성: 누구나 쉽게 배우고 익힐 수 있음
- 유연성: 사용자 요구를 최대한 수용하고 실수를 방지
20-3
아래 Java 프로그램이 출력하는 값을 적으시오.
public class Main {
public static void main(String[] args) {
int k = 0, total = 0;
while (k < 11) {
k++;
if (k % 3 == 0)
continue;
total += k;
}
System.out.println(total);
}
}48
[해설]
continue를 만나면 남은 문장을 건너뛰고 다음 반복으로 넘어간다. 그래서 k가 3의 배수일 때는 total에 더해지지 않는다.
k를 먼저 증가시킨 뒤 더하므로 실제로 더해지는 값은 1부터 11까지다. k가 10일 때 조건을 통과하고, 증가해서 11이 된 값까지 더해진다.
1~11의 합 = 66
제외되는 3의 배수 = 3 + 6 + 9 = 18
total = 66 − 18 = 48
20-3
소프트웨어의 외부 동작은 그대로 둔 채 내부 코드 구조를 다듬는 리팩토링(Refactoring)을 수행하는 목적을 간략히 서술하시오.
복잡한 코드를 단순하게 정리해 가독성과 유지보수성을 높이고, 이를 통해 생산성과 품질을 향상시키기 위함이다.
[해설]
리팩토링은 기능은 그대로 두고 내부 구조만 개선하는 작업이다.
- 단순화 — 중복을 없애고 긴 함수를 나누는 식으로 복잡한 코드를 정리한다.
- 가독성 — 의미 있는 이름과 짧은 구조로 코드를 읽기 쉽게 만든다.
- 유지보수성 — 읽기 쉬운 코드는 고치고 늘리기도 쉽다.
- 생산성·품질 — 결함이 숨을 곳이 줄고 변경 비용이 낮아져 개발 속도와 품질이 함께 오른다.
외우는 요령: "단순화 → 가독성·유지보수성 → 생산성·품질"의 인과 순서대로 쓴다.
20-3
TCP/IP 환경에서 IP 패킷 전달 중 오류가 생기거나 목적지에 도달할 수 없을 때, 이를 송신 측에 알리는 제어 메시지를 담당하는 프로토콜의 명칭을 적으시오.
ICMP
[해설]
IP에는 자체 오류 보고 기능이 없어서 ICMP(Internet Control Message Protocol)가 오류·제어 메시지를 송신 측에 알린다.
대표 메시지는 목적지 도달 불가(Destination Unreachable)와 시간 초과(Time Exceeded)이다. ping·traceroute도 ICMP를 이용한다.
혼동 주의: IGMP는 멀티캐스트 그룹을 관리하고, ARP는 IP 주소를 MAC 주소로 바꾸는 프로토콜이다.
20-3
[회원] 테이블에 최대 40자의 가변 길이 문자열을 담는 '이메일' 속성을 새로 추가하려 한다. 빈칸 ①, ②에 들어갈 키워드를 적으시오.
( ① ) TABLE 회원 ( ② ) 이메일 VARCHAR(40);① ALTER
② ADD
[해설]
이미 있는 테이블의 구조를 바꾸는 DDL은 ALTER TABLE이고, 속성(열)을 추가할 때는 ADD를 쓴다.
완성한 문장은 다음과 같다.
ALTER TABLE 회원 ADD 이메일 VARCHAR(40);
혼동 주의: 속성 변경은 MODIFY(DBMS에 따라 ALTER COLUMN), 속성 삭제는 DROP을 쓴다.
20-3
관계 대수 연산 중, 릴레이션 A에서 릴레이션 B의 모든 튜플과 연관된 튜플만 골라낸 뒤 B의 속성을 제외한 나머지 속성만 남기는 연산의 기호를 적으시오.
÷
[해설]
관계 대수의 디비전(Division, ÷)은 A에서 B의 값을 모두 가진 튜플만 골라낸 뒤 B의 속성을 떼어 낸다.
예를 들어 수강 릴레이션 ÷ 필수과목 릴레이션을 하면 필수과목을 전부 수강한 학생만 남는다.
혼동 주의: 셀렉트 σ는 조건에 맞는 행을 고르고, 프로젝트 π는 지정한 열을 뽑으며, 조인 ⋈은 공통 속성으로 두 릴레이션을 결합한다.
20-3
데이터베이스 스키마(Schema)가 무엇인지 서술하시오.
데이터베이스의 구조와 제약조건 등을 정의한 명세(기본 구조)이다.
[해설]
스키마는 데이터 개체·속성·관계와 구조, 제약조건을 기술한 데이터베이스의 설계도다. 데이터 사전(시스템 카탈로그)에 저장된다.
관점에 따라 외부·개념·내부 스키마의 3단계로 나뉜다. 각각 사용자 관점, 기관 전체의 논리 구조, 물리적 저장 구조를 뜻한다.
20-3
[수강] 테이블에서 과목별 점수 평균이 90 이상인 과목에 대해 과목명, 최소점수, 최대점수를 구하는 SQL 문을 작성하시오.
- GROUP BY와 HAVING을 반드시 사용하고, WHERE 절은 쓰지 않는다.
- 최소점수·최대점수는 별칭(AS)으로 지정한다.
- 대소문자는 구분하지 않으며, 끝의 세미콜론(;)은 생략해도 된다.
- 결과 행의 순서는 채점하지 않는다.
[수강]
| 과목코드 | 과목명 | 등급 | 점수 |
|---|---|---|---|
| 3100 | 자료구조 | A | 92 |
| 3200 | 네트워크 | B+ | 86 |
| 3100 | 자료구조 | B+ | 88 |
| 3300 | 보안 | A+ | 97 |
| 3200 | 네트워크 | A | 91 |
| 3300 | 보안 | B+ | 89 |
[결과]
| 과목명 | 최소점수 | 최대점수 |
|---|---|---|
| 자료구조 | 88 | 92 |
| 보안 | 89 | 97 |
SELECT 과목명, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 수강 GROUP BY 과목명 HAVING AVG(점수) >= 90;
[해설]
과목명으로 묶은 뒤(GROUP BY 과목명) 그룹 단위 조건은 HAVING AVG(점수) >= 90으로 건다. WHERE는 그룹 이전 행 단위 조건이라 집계 함수를 쓸 수 없다.
- 자료구조: (92+88)/2 = 90 → 포함(이상)
- 네트워크: (86+91)/2 = 88.5 → 제외
- 보안: (97+89)/2 = 93 → 포함
각 그룹의 최솟값·최댓값은 MIN(점수) AS 최소점수, MAX(점수) AS 최대점수로 구한다.
20-3
프로그램 내부 구조를 보지 않고 요구사항 명세만을 근거로 입력과 출력을 검증하는 테스트 기법으로, 동등 분할·경계값 분석·원인-결과 그래프 등이 여기에 속한다. 이 테스트 기법의 명칭을 적으시오.
블랙박스 테스트(명세 기반 테스트)
[해설]
내부 구조를 보지 않고 요구사항 명세만으로 입력과 출력을 검증하므로 블랙박스 테스트(명세 기반 테스트)다.
- 동등 분할 — 같은 결과를 내는 입력을 그룹으로 나누고 그룹마다 대표값만 시험한다.
- 경계값 분석 — 오류가 잦은 입력 범위의 경계 근처 값을 집중해서 시험한다.
- 원인-결과 그래프 — 입력 조건과 출력의 관계를 그래프로 분석해 테스트 케이스를 만든다.
혼동 주의: 기초 경로·조건·분기 커버리지처럼 내부 논리를 검사하는 기법은 화이트박스 테스트(구조 기반 테스트)다.
20-3
다음 설명에 해당하는 라우팅 프로토콜의 명칭을 적으시오.
- 하나의 자율 시스템(AS) 안에서 쓰이는 내부 라우팅 프로토콜(IGP)이다.
- 링크 상태(Link State) 방식으로, 다익스트라(Dijkstra) 알고리즘으로 최단 경로를 계산한다.
- 영역(Area)을 나눠 관리할 수 있어 규모가 큰 네트워크에 알맞다.
OSPF
[해설]
링크 상태 방식에 다익스트라 알고리즘을 쓰는 대표 IGP는 OSPF(Open Shortest Path First)다.
라우터끼리 링크 상태 정보를 주고받아 망 전체 지도를 만든 뒤 최단 경로를 계산한다. 영역(Area)으로 나눠 관리할 수 있어 대규모 망에 알맞다.
혼동 주의: RIP은 홉 수를 기준으로 하는 거리 벡터 방식(최대 15홉)이고, BGP는 AS와 AS 사이에서 쓰는 EGP다.
20-3
아래 [학생] 테이블에서 이름이 '한결'인 튜플을 삭제하는 SQL 문을 작성하시오.
[학생]
| 학번 | 이름 | 학과 | 학년 |
|---|---|---|---|
| 2401 | 윤서아 | 전자공학 | 2 |
| 2402 | 한결 | 경영학 | 3 |
| 2403 | 고민준 | 통계학 | 1 |
| 2404 | 배다인 | 건축학 | 4 |
DELETE FROM 학생 WHERE 이름 = '한결';
[해설]
튜플 삭제는 DELETE FROM 테이블 WHERE 조건 형식이다. 문자열 값은 작은따옴표로 감싼다.
WHERE를 빠뜨리면 테이블의 모든 행이 지워지므로 주의한다. 테이블 자체를 없애는 것은 DDL인 DROP TABLE이다.
20-3
빈칸 ( ㉮ )에 들어갈 용어를 적으시오.
- 심리학자 톰 마릴(Tom Marill)은 컴퓨터끼리 메시지를 주고받고, 도착 여부를 확인하며, 도착하지 않으면 다시 보내는 일련의 규칙을 ( ㉮ )(이)라 불렀다.
- 이 말은 본래 외교 의례처럼 '정해진 격식·절차'를 뜻하는 단어에서 왔다.
프로토콜(Protocol)
[해설]
통신 주체끼리 메시지를 주고받기 위해 미리 약속한 규칙과 절차를 프로토콜(Protocol)이라 한다.
원래 외교 의례의 '격식·절차'를 뜻하는 말이다. 톰 마릴이 컴퓨터 사이의 전송, 도착 확인, 재전송 규칙에 이 이름을 붙였다.
프로토콜의 기본 요소는 구문(Syntax)·의미(Semantics)·타이밍(Timing)이다.
20-3
EAI(Enterprise Application Integration)의 구축 유형은 4가지다. 아래 설명의 빈칸 ①, ②에 들어갈 유형을 적으시오.
- ( ① ): 미들웨어 없이 애플리케이션끼리 1:1로 직접 연결한다. 변경과 재사용이 어렵다.
- ( ② ): 중앙의 허브가 모든 데이터 전송을 맡는 중앙 집중형이다. 허브 장애 시 전체가 멈춘다.
- 메시지 버스(Message Bus): 애플리케이션 사이에 미들웨어(버스)를 두어 처리한다.
- 하이브리드(Hybrid): 그룹 내부는 허브 방식, 그룹 간은 메시지 버스 방식을 쓴다.
① 포인트 투 포인트(Point-to-Point)
② 허브 앤 스포크(Hub & Spoke)
[해설]
EAI 구축 유형은 연결 구조에 따라 포인트 투 포인트, 허브 앤 스포크, 메시지 버스, 하이브리드로 나뉜다.
- 포인트 투 포인트 — 애플리케이션끼리 1:1로 직접 연결해 구성은 단순하지만 연결 수가 급격히 늘어 변경과 재사용이 어렵다.
- 허브 앤 스포크 — 바퀴의 허브(중심)와 스포크(바퀴살)처럼 중앙 허브를 거쳐 전송해 확장은 쉽지만 허브가 단일 장애점이 된다.
1:1 직접 연결은 포인트 투 포인트, 중앙 집중은 허브 앤 스포크로 이름의 뜻 그대로 연결해 외운다.