프로그래밍 언어 활용 · 오답노트
2025년 2회
오류 제어에 사용되는 자동 반복 요청 방식(ARQ)이 아닌 것은?
핵심 해설
ARQ(Automatic Repeat reQuest, 자동 반복 요청)는 수신 측이 오류를 검출하면 송신 측에 재전송을 요구해 오류를 바로잡는 후진 오류 정정(BEC) 방식이다. 표준 ARQ는 정지-대기(Stop-and-Wait), 연속적(Continuous) ARQ, 적응적(Adaptive) ARQ 세 계열로 나뉘며, 연속적 ARQ는 다시 Go-Back-N ARQ와 Selective-Repeat ARQ로 갈린다. 즉 시험에서 묻는 ARQ 종류는 Stop-and-Wait, Go-Back-N, Selective-Repeat, Adaptive의 네 가지이다. 'Non-Acknowledge ARQ'라는 방식은 존재하지 않는 만들어진 용어이므로 이것이 답이다.
보기별 해설
정리
OSI 7계층 중 네트워크 계층에 대한 설명으로 틀린 것은?
핵심 해설
OSI 7계층 중 네트워크 계층(3계층)은 발신지에서 최종 목적지까지 패킷을 전달하는 종단 간 전달(source-to-destination delivery)을 책임진다. 이를 위해 패킷 헤더에 발신지·목적지의 논리 주소(IP 주소)를 넣고, 라우터가 라우팅 테이블을 참조해 경로를 지정하거나 교환 기능을 수행하며, 필요하면 단편화도 담당한다. 반면 '한 노드에서 인접한 다른 노드로 프레임을 전달'하는 것은 바로 아래 데이터 링크 계층(2계층)의 역할이다. 데이터 링크 계층은 물리 주소(MAC)를 사용해 인접 노드 간(hop-to-hop) 전달과 흐름 제어·오류 제어를 담당하므로 2번이 네트워크 계층 설명으로 틀렸다.
보기별 해설
정리
다음 C언어 프로그램이 실행되었을 때실행, 결과는? #include <stdio.h> int main(int argc, char* argv[]) { int a = 5, b = 3, c = 12; int t1, t2, t3; t1 = a && b; t2 = a || b; t3 = !c; printf("%d", t1 + t2 + t3); return 0; }
핵심 해설
C의 논리 연산자는 참이면 1, 거짓이면 0을 반환하며 0이 아닌 모든 값을 참으로 취급한다. a=5, b=3, c=12로 두고 각 식을 추적하면 ① t1 = a && b 에서 5도 참, 3도 참이므로 t1 = 1이다. ② t2 = a || b 에서 왼쪽 a가 참이므로 단축 평가로 바로 t2 = 1이 된다. ③ t3 = !c 에서 c=12는 참이므로 부정하면 t3 = 0이다. 따라서 t1 + t2 + t3 = 1 + 1 + 0 = 2가 출력된다(gcc로 컴파일·실행해 확인함).
보기별 해설
정리
OSI 7계층 중 프로토콜 데이터 단위(PDU)가 메시지(Message)가 아닌 것은?
핵심 해설
OSI 7계층은 계층마다 고유한 프로토콜 데이터 단위(PDU)를 갖는다. 물리 계층은 비트(Bit), 데이터 링크 계층은 프레임(Frame), 네트워크 계층은 패킷(Packet) 또는 데이터그램, 전송 계층은 세그먼트(Segment, UDP는 데이터그램)이며, 상위 3개 계층인 세션·표현·응용 계층은 모두 메시지(Message) 또는 데이터로 부른다. 따라서 PDU가 메시지가 아닌 계층은 세그먼트를 쓰는 전송 계층이다. 전송 계층은 포트 번호로 프로세스를 구분하고 종단 간 신뢰성·흐름 제어를 담당한다.
보기별 해설
정리
다음 Python 프로그램이 실행되었을 때실행, 결과는? strA = 'Information Technology' strL = list() for i in range(0, len(strA), 2): strL.append(strA[i]) for j in range(len(strL) - 1, 0, -2): print(strL[j], end='')
핵심 해설
range(start, stop, step)와 문자열 인덱싱을 단계적으로 따라가면 된다. 문자열 'Information Technology'는 22글자이고, 첫 반복문은 range(0, 22, 2)로 짝수 인덱스 문자만 뽑아 strL을 만든다. 그 결과 strL = ['I','f','r','a','i','n','T','c','n','l','g'](11개, 인덱스 0~10)이다. 두 번째 반복문 range(10, 0, -2)는 10, 8, 6, 4, 2를 순회하므로(0은 stop이라 제외) strL[10]='g', strL[8]='n', strL[6]='T', strL[4]='i', strL[2]='r'이 차례로 end=''로 이어 붙어 'gnTir'가 출력된다(python3로 실행해 확인함).
보기별 해설
정리
프로세스 적재 정책과 관련한 설명으로 틀린 것은?
핵심 해설
스레싱(Thrashing)은 다중 프로그래밍 정도가 지나쳐 각 프로세스에 할당된 프레임이 워킹 셋보다 부족해지면서, CPU가 실제 프로세스 수행보다 페이지 교체(스왑 인·아웃)에 더 많은 시간을 쓰는 현상이다. 즉 '프로세스 수행 시간 < 페이지 교체 시간'일 때 스레싱이며, 3번은 부등호가 반대로 뒤집혀 있어 틀렸다. 스레싱은 지역성(Locality) 원리에 기반한 워킹 셋 기법이나 페이지 부재 빈도(PFF) 기법으로 각 프로세스에 충분한 프레임을 보장해 방지한다. 지역성에는 반복문·부프로그램·스택처럼 최근 참조한 항목을 다시 참조하는 시간 지역성과, 배열 순회처럼 인접 주소를 참조하는 공간 지역성이 있다.
보기별 해설
정리
다음은 정수 배열 a에 0부터 9까지의 무작위 수를 저장하는 Java 코드이다괄호에. 들어갈 알맞은 코드는 무엇인가? import ( ).*; public class Test { public static void main(String[] args) { Random rand = new Random( ); int a[] = new int[6]; for(int i = 0; i < 6; i++) a[i] = rand.nextInt(10); } }
핵심 해설
Java에서 난수를 만드는 Random 클래스는 java.util 패키지에 속하므로 import java.util.*; 또는 import java.util.Random;이 필요하다. 코드의 rand.nextInt(10)은 0 이상 10 미만, 즉 0~9의 정수 난수를 반환하므로 문제에서 요구한 '0부터 9까지의 무작위 수'와 정확히 맞는다. 참고로 nextInt(n)은 상한 n을 포함하지 않는 반개구간 [0, n)에서 값을 뽑는다는 점을 기억해야 한다. 따라서 괄호에 들어갈 패키지는 java.util이다.
보기별 해설
정리
리눅스 Bash 쉘(Shell)에서 export와 관련한 설명으로 틀린 것은?
핵심 해설
리눅스 Bash에서 export는 현재 쉘의 변수를 환경변수로 승격시켜, 이 쉘에서 파생되는 자식 프로세스(하위 쉘)까지 그 값을 물려받게 하는 명령이다. export 없이 만든 변수는 현재 쉘에만 존재하는 지역 변수여서 자식 프로세스에서는 보이지 않는다. 매개변수 없이 export만 입력하면 현재 설정된 환경변수 목록이 출력되고, export -p로도 확인할 수 있다. 변수의 값을 화면에 출력할 때 쓰는 명령은 echo $변수명(또는 printf)이므로, '변수를 출력하려면 export를 써야 한다'는 1번이 틀린 설명이다.
보기별 해설
정리
다음 Java 프로그램이 실행되었을 때의 결과는? public class Test { public static void main(String[] args) { int x = 7, y = 0; while(x-- > 0) { if (x%3 == 0) continue; y++; } System.out.print(y); } }
핵심 해설
후위 감소 x--는 현재 값으로 조건을 판정한 뒤 x를 1 감소시킨다. x=7, y=0에서 시작해 각 반복을 추적하면 다음과 같다. ① 조건 7>0 참, x=6 → 6%3==0이라 continue, y=0. ② 6>0 참, x=5 → 5%3=2, y=1. ③ 5>0 참, x=4 → 4%3=1, y=2. ④ 4>0 참, x=3 → 3%3==0 continue, y=2. ⑤ 3>0 참, x=2 → 2%3=2, y=3. ⑥ 2>0 참, x=1 → 1%3=1, y=4. ⑦ 1>0 참, x=0 → 0%3==0 continue, y=4. ⑧ 0>0 거짓이라 반복 종료(x는 -1). 조건문이 검사하는 x 값은 6,5,4,3,2,1,0의 7개이고 이 중 3의 배수인 6, 3, 0에서 continue되므로 y는 4가 된다(java로 실행해 확인함).
보기별 해설
정리
TCP/IP 프로토콜에서 TCP가 해당하는 계층은?
핵심 해설
TCP/IP 프로토콜 스택은 네트워크 액세스 계층, 인터넷 계층, 전송(트랜스포트) 계층, 응용 계층의 4계층으로 구성된다. TCP(Transmission Control Protocol)는 이 중 전송 계층에 속하며, OSI 7계층으로는 4계층인 전송 계층에 대응한다. TCP는 3-way handshake로 연결을 설정하는 연결 지향형 프로토콜로, 순서 번호와 확인 응답(ACK), 재전송, 슬라이딩 윈도우를 통한 흐름 제어와 혼잡 제어로 신뢰성 있는 전송을 보장한다. 같은 계층의 UDP는 비연결형으로 신뢰성 대신 속도를 택한 프로토콜이다.
보기별 해설
정리
Java에서 사용되는 출력 함수가 아닌 것은?
핵심 해설
Java의 표준 출력은 System.out 객체(PrintStream 타입)의 메소드를 통해 이루어지며, 사용할 수 있는 것은 print(), println(), printf(), write() 등이다. print()는 줄 바꿈 없이 출력하고, println()은 출력 후 줄을 바꾸며, printf()는 C의 printf처럼 %d·%s·%f 같은 서식 지정자를 사용해 형식을 맞춰 출력한다. 반면 printing()이라는 메소드는 PrintStream 클래스에 존재하지 않으므로 호출하면 'cannot find symbol' 컴파일 오류가 발생한다.
보기별 해설
정리
다음의 페이지 참조 열(Page reference)에 대해 페이지 교체 기법으 로 선입선출 알고리즘을 사용할 경우 페이지 부재(Page Fault) 횟수 는? (단할당된, 페이지 프레임 수는 3이고처음에는, 모든 프레임이 비어 있다.) <페이지 참조열> 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0
핵심 해설
FIFO(선입선출) 페이지 교체는 프레임에 가장 먼저 들어온 페이지를 먼저 내보내며, 참조한 페이지가 프레임에 없으면 페이지 부재가 발생한다. 프레임 3개로 참조열 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0을 추적하면(대괄호는 적재 순서) 7→[7]부재1, 0→[7,0]부재2, 1→[7,0,1]부재3, 2→7제거[0,1,2]부재4, 0→적중, 3→0제거[1,2,3]부재5, 0→1제거[2,3,0]부재6, 4→2제거[3,0,4]부재7, 2→3제거[0,4,2]부재8, 3→0제거[4,2,3]부재9, 0→4제거[2,3,0]부재10, 3→적중, 2→적중, 1→2제거[3,0,1]부재11, 2→3제거[0,1,2]부재12, 0→적중, 1→적중, 7→0제거[1,2,7]부재13, 0→1제거[2,7,0]부재14가 된다. 총 참조 19회 중 적중 5회이므로 페이지 부재는 14회이다.
보기별 해설
정리
배치 프로그램의 자동 수행 주기 중 사용자가 특정 조건을 설정해 두고 해당 조건이 충족될 때만 수행되도록 하는 것은?
핵심 해설
배치 프로그램(Batch Program)은 사용자와의 상호작용 없이 대량의 데이터를 일괄 처리하는 프로그램이며, 수행 방식에 따라 정기 배치, 이벤트성 배치, On-Demand 배치로 나뉜다. 이 중 이벤트성 배치는 특정 조건(임계치 초과, 파일 도착, 상태 변화 등)을 미리 설정해 두고 그 조건이 충족되는 순간에만 실행되는 방식이다. 반면 정기 배치는 시간(일·주·월) 기준으로 주기적으로, On-Demand 배치는 사용자의 요청이 있을 때 즉시 실행된다. 문제의 '특정 조건 설정 후 충족될 때만 수행'이라는 서술이 곧 이벤트성 배치의 정의이다.
보기별 해설
정리
다음 Python 코드 출력문의 결과는? print(4, 1, 2, sep=',', end='') print(3, 5, sep='/')
핵심 해설
파이썬 print()의 sep는 여러 인수 사이에 끼워 넣을 구분자, end는 출력을 마친 뒤 덧붙일 문자열이며 기본값은 각각 공백 ' '과 줄 바꿈 '\n'이다. 첫 번째 print(4, 1, 2, sep=',', end='')는 인수 사이를 쉼표로 이어 '4,1,2'를 출력하고 end가 빈 문자열이라 줄 바꿈 없이 끝난다. 두 번째 print(3, 5, sep='/')는 '3/5'를 출력하고 end가 기본값이므로 줄을 바꾼다. 두 출력이 같은 줄에 이어지므로 최종 화면 출력은 4,1,23/5이다(python3로 실행해 확인함).
보기별 해설
정리
JAVA의 예외(exception)와 관련한 설명으로 틀린 것은?
핵심 해설
Java에서 예외(Exception)는 프로그램이 실행되는 도중(runtime)에 발생해 정상 흐름을 방해하는 사건으로, try~catch~finally나 throws로 처리할 수 있는 대상이다. 배열 인덱스 초과(ArrayIndexOutOfBoundsException), 존재하지 않는 파일 접근(FileNotFoundException), 0으로 나누기(ArithmeticException), null 참조(NullPointerException) 등이 대표적인 예외이다. 반면 문법 오류(Syntax Error)는 컴파일 단계에서 javac가 잡아내는 컴파일 오류로, 실행 자체가 불가능하므로 예외가 아니다. 따라서 '문법 오류로 인해 발생한 것'이라는 1번이 예외 설명으로 틀렸다.
보기별 해설
정리
다음은 파이썬으로 만들어진 반복문 코드이다이. 코드의 결과는? while(True) : print('A') print('B') break print('C') print('D')
핵심 해설
파이썬은 들여쓰기로 블록을 구분하므로 코드의 실제 들여쓰기 구조를 복원해야 한다. 원본 코드는 while 블록 안에 print('A'), print('B'), break, print('C')가 들어 있고 print('D')만 블록 밖에 있는 형태이다(PDF 추출 과정에서 들여쓰기가 사라져 print('C')가 밖으로 나온 것처럼 보인다). 실행을 추적하면 조건 True로 진입해 A와 B를 출력한 뒤 break가 실행되어 반복문을 즉시 빠져나가므로, 그 뒤의 print('C')는 도달할 수 없는 코드(dead code)가 되어 실행되지 않는다. 반복문을 벗어난 다음 블록 밖의 print('D')가 실행되어 최종 출력은 A, B, D이다(python3로 확인함).
보기별 해설
정리
사용자 수준에서 지원되는 스레드(thread)가 커널에서 지원되는 스레드에 비해 가지는 장점으로 옳은 것은?
핵심 해설
사용자 수준 스레드(User-Level Thread)는 커널이 아니라 사용자 공간의 스레드 라이브러리가 생성·스케줄링·문맥 교환을 모두 처리하는 방식이다. 커널은 이를 하나의 프로세스로만 인식하므로 스레드를 바꿀 때 커널 모드로 전환할 필요가 없고, 그만큼 문맥 교환 오버헤드가 작아 생성과 전환이 매우 빠르다. 대신 커널이 개별 스레드를 알지 못해 한 스레드가 시스템 호출로 블록되면 프로세스 전체가 멈추고, 다중 프로세서에서 병렬 실행도 불가능하다. 나머지 보기들은 모두 커널 수준 스레드(Kernel-Level Thread)의 장점이므로, 사용자 수준 스레드의 장점은 4번이다.
보기별 해설
정리
다음 중 페이지 교체(Page Replacement) 알고리즘이 아닌 것은?
핵심 해설
페이지 교체(Page Replacement) 알고리즘은 페이지 부재가 발생했을 때 주기억장치의 어느 페이지를 내보낼지 결정하는 기법으로 OPT, FIFO, LRU, LFU, NUR, SCR(2차 기회) 등이 있다. 반면 SCF는 디스크 스케줄링의 SCAN·C-SCAN·SSTF나 SJF와 혼동하기 쉽게 만든 이름으로, 페이지 교체 알고리즘 목록에는 존재하지 않는 용어이다. 보기 끝의 '5'는 PDF 추출 과정에서 끼어든 쪽 번호 잡음이다. 따라서 페이지 교체 알고리즘이 아닌 것은 SCF이다.
보기별 해설
정리
프레임워크(Framework)에 대한 설명으로 옳은 것은?
핵심 해설
소프트웨어 프레임워크(Framework)는 특정 영역의 응용을 개발할 때 필요한 기본 골격과 공통 기능을 미리 구현해 제공하는 반제품 형태의 소프트웨어이다. 개발자는 이 골격 위에 필요한 부분만 채워 넣으므로 재사용성과 개발 생산성이 높아지고, 품질과 유지보수성도 좋아진다. 프레임워크는 제어의 역흐름(IoC)에 따라 프레임워크가 개발자 코드를 호출하는 구조를 가지며, 모듈화와 확장 지점(hook)을 통해 기능을 덧붙일 수 있게 설계된다. 따라서 '기본 구조를 제공해 재사용을 가능하게 한다'는 1번이 옳은 설명이다.
보기별 해설
정리
단편화(Fragmentation)와 재결합(Reassembly)에 대한 설명으로 옳지 않은 것은?
핵심 해설
단편화(Fragmentation)는 송신 측이 전송할 데이터를 전송 매체가 감당할 수 있는 일정 크기의 작은 블록으로 나누는 작업이고, 재결합(Reassembly)은 수신 측이 그 블록들을 원래 데이터로 되돌리는 작업이다. 데이터를 작게 나누면 한 블록에서 오류가 나도 그 블록만 재전송하면 되므로 효과적인 오류 제어가 가능하고, 여러 블록을 병렬·파이프라인 방식으로 보낼 수 있어 전송 효율이 좋아진다. 다만 단편화로 세분화된 데이터 블록을 부르는 이름은 프레임이 아니라 패킷(또는 세그먼트, 프래그먼트)이다. 프레임은 데이터 링크 계층의 PDU 이름이므로 단편화 결과물의 일반 명칭으로 쓸 수 없어 3번이 옳지 않다.