← 목록

프로그래밍 언어 활용 · 오답노트

2025년 2회

Q1

오류 제어에 사용되는 자동 반복 요청 방식(ARQ)이 아닌 것은?

1Stop-and-wait ARQ
2Go-back-N ARO
3Selective-Repeat ARQ
4Non-Acknowledge ARQ
정답 4번 · Non-Acknowledge 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'라는 방식은 존재하지 않는 만들어진 용어이므로 이것이 답이다.

보기별 해설

1. Stop-and-wait ARQ(정지-대기 ARQ)는 프레임을 하나 보낸 뒤 그에 대한 ACK가 올 때까지 기다렸다가 다음 프레임을 보내는 가장 단순한 방식이다. 구현이 쉽지만 대기 시간 때문에 전송 효율이 낮다.
2. Go-back-N ARQ는 연속적 ARQ의 하나로, 여러 프레임을 연속 전송하다가 N번째 프레임에서 오류가 나면 그 이후의 프레임까지 모두 되돌아가 재전송한다. 보기 표기의 'ARO'는 PDF 추출 과정에서 Q가 O로 잘못 인식된 것이며 실제로는 ARQ이다.
3. Selective-Repeat ARQ(선택적 재전송)도 연속적 ARQ의 하나로, 오류가 발생한 프레임만 골라 다시 보낸다. 전송 효율은 높지만 수신 측에 순서를 맞추기 위한 버퍼와 재정렬 기능이 필요해 복잡하다.
4. Non-Acknowledge ARQ는 실제로 존재하지 않는 용어이다. ARQ는 수신 측의 ACK/NAK 응답을 전제로 동작하는 방식이므로 '응답하지 않는 ARQ'라는 개념 자체가 성립하지 않으며, 남은 정식 분류는 Adaptive ARQ이다.

정리

ARQ 4종 — 정지-대기(Stop-and-Wait), Go-Back-N(오류 이후 전부 재전송), Selective-Repeat(오류분만 재전송), Adaptive(회선 상태에 따라 블록 길이 조절). Non-Acknowledge ARQ는 없는 용어이다.
#프로그래밍언어활용
Q2

OSI 7계층 중 네트워크 계층에 대한 설명으로 틀린 것은?

1패킷을 발신지로부터 최종 목적지까지 전달하는 책임을 진다.
2한 노드로부터 다른 노드로 프레임을 전송하는 책임을 진다.
3패킷에 발신지와 목적지의 논리 주소를 추가한다.
4라우터 또는 교환기는 패킷 전달을 위해 경로를 지정하거나 교환 기능을 제공한다.
정답 2번 · 한 노드로부터 다른 노드로 프레임을 전송하는 책임을 진다.

핵심 해설

OSI 7계층 중 네트워크 계층(3계층)은 발신지에서 최종 목적지까지 패킷을 전달하는 종단 간 전달(source-to-destination delivery)을 책임진다. 이를 위해 패킷 헤더에 발신지·목적지의 논리 주소(IP 주소)를 넣고, 라우터가 라우팅 테이블을 참조해 경로를 지정하거나 교환 기능을 수행하며, 필요하면 단편화도 담당한다. 반면 '한 노드에서 인접한 다른 노드로 프레임을 전달'하는 것은 바로 아래 데이터 링크 계층(2계층)의 역할이다. 데이터 링크 계층은 물리 주소(MAC)를 사용해 인접 노드 간(hop-to-hop) 전달과 흐름 제어·오류 제어를 담당하므로 2번이 네트워크 계층 설명으로 틀렸다.

보기별 해설

1. 패킷을 발신지로부터 최종 목적지까지 전달하는 책임은 네트워크 계층의 핵심 기능으로 옳다. 여러 링크를 거치는 종단 간 전달을 담당하며 대표 프로토콜은 IP이다.
2. 한 노드에서 다른 노드로 프레임을 전송하는 책임은 네트워크 계층이 아니라 데이터 링크 계층(2계층)의 역할이다. PDU가 프레임이고 MAC 주소를 사용해 인접 노드 간 전달과 흐름·오류 제어를 수행한다.
3. 패킷에 발신지와 목적지의 논리 주소를 추가하는 것은 네트워크 계층이 맞다. 여기서 논리 주소는 IP 주소를 뜻하며, 물리 주소(MAC)를 붙이는 일은 데이터 링크 계층이 한다.
4. 라우터나 교환기가 경로를 지정하고 교환 기능을 제공한다는 설명도 네트워크 계층에 해당한다. 라우팅(경로 선택)과 스위칭이 이 계층의 대표 기능이며 라우터는 3계층 장비이다.

정리

2계층 데이터 링크 = 인접 노드 간(hop-to-hop) 프레임 전달, MAC 주소. 3계층 네트워크 = 발신지~목적지(end-to-end) 패킷 전달, IP 논리 주소, 라우팅.
#프로그래밍언어활용#OSI7계층
Q3

다음 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; }

1
2
3
414
정답 2번 · 2

핵심 해설

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로 컴파일·실행해 확인함).

보기별 해설

1. 0은 세 논리 연산이 모두 거짓일 때 나오는 값이다. a=5와 b=3이 모두 0이 아니어서 참이므로 t1과 t2가 각각 1이 되어 합이 0일 수 없다.
2. 2는 t1=1(5&&3), t2=1(5||3), t3=0(!12)을 더한 값으로 추적 결과와 일치한다. 논리 연산 결과는 피연산자의 크기와 무관하게 항상 0 또는 1이라는 점이 핵심이다.
3. 5는 변수 a의 값 자체이다. 논리 연산자는 피연산자 값을 그대로 돌려주지 않고 참·거짓 판정 결과인 1 또는 0만 반환하므로 5가 나올 수 없다.
4. 14는 a+b+c=5+3+12=20이나 산술 계산과 뒤섞어 잘못 구한 값이다. 이 코드는 논리 연산 결과 1, 1, 0을 더할 뿐이므로 원래 변수 값이 합계에 반영되지 않는다.

정리

C 논리 연산 결과는 항상 1(참) 또는 0(거짓)이며 0이 아닌 값은 모두 참이다. 5&&3=1, 5||3=1, !12=0 → 합 2.
#프로그래밍언어활용#C언어
Q4

OSI 7계층 중 프로토콜 데이터 단위(PDU)가 메시지(Message)가 아닌 것은?

1전송 계층
2세션 계층
3표현 계층
4응용 계층
정답 1번 · 전송 계층

핵심 해설

OSI 7계층은 계층마다 고유한 프로토콜 데이터 단위(PDU)를 갖는다. 물리 계층은 비트(Bit), 데이터 링크 계층은 프레임(Frame), 네트워크 계층은 패킷(Packet) 또는 데이터그램, 전송 계층은 세그먼트(Segment, UDP는 데이터그램)이며, 상위 3개 계층인 세션·표현·응용 계층은 모두 메시지(Message) 또는 데이터로 부른다. 따라서 PDU가 메시지가 아닌 계층은 세그먼트를 쓰는 전송 계층이다. 전송 계층은 포트 번호로 프로세스를 구분하고 종단 간 신뢰성·흐름 제어를 담당한다.

보기별 해설

1. 전송 계층(4계층)의 PDU는 메시지가 아니라 세그먼트(Segment)이다. TCP는 세그먼트, UDP는 사용자 데이터그램이라 부르며 포트 번호로 프로세스를 식별하고 종단 간 신뢰성과 흐름 제어를 담당한다.
2. 세션 계층(5계층)의 PDU는 메시지이다. 통신 세션의 설정·유지·종료와 동기점(체크포인트) 삽입, 대화 제어(전이중·반이중)를 담당한다.
3. 표현 계층(6계층)의 PDU도 메시지이다. 데이터의 표현 형식 변환(코드 변환), 암호화·복호화, 압축·해제를 수행해 응용 계층이 형식 차이를 신경 쓰지 않게 한다.
4. 응용 계층(7계층)의 PDU도 메시지이다. HTTP, FTP, SMTP, DNS처럼 사용자와 직접 맞닿는 서비스를 제공하는 최상위 계층이다.

정리

OSI PDU — 물리: 비트, 데이터링크: 프레임, 네트워크: 패킷, 전송: 세그먼트, 세션·표현·응용: 메시지(데이터).
#프로그래밍언어활용#OSI7계층
Q5

다음 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='')

1gnTir
2riTng
3ot hl
4lh to 4
정답 1번 · gnTir

핵심 해설

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로 실행해 확인함).

보기별 해설

1. gnTir는 strL[10]='g', strL[8]='n', strL[6]='T', strL[4]='i', strL[2]='r'을 차례로 출력한 결과로 추적과 일치한다. range의 stop 값 0은 포함되지 않아 strL[0]='I'는 출력되지 않는다.
2. riTng는 gnTir를 거꾸로 뒤집은 문자열이다. 두 번째 반복문의 step이 -2이므로 큰 인덱스에서 작은 인덱스로 진행하며, 앞에서부터 진행하지 않는다.
3. ot hl은 짝수가 아니라 홀수 인덱스 문자들을 뽑았을 때 나올 법한 조합이다. 첫 반복문이 range(0, len, 2)로 인덱스 0부터 짝수 위치만 담으므로 해당하지 않는다.
4. lh to는 홀수 인덱스 문자를 역순으로 나열한 형태에 가깝다. 보기 끝의 '4'는 PDF 추출 과정에서 끼어든 쪽 번호 잡음이며, 어느 쪽이든 실제 출력 gnTir와 다르다.

정리

range(0, n, 2)는 짝수 인덱스, range(len-1, 0, -2)는 마지막 인덱스부터 2씩 줄이며 stop 값 0은 제외. 'Information Technology' → 'gnTir'.
#프로그래밍언어활용#Python
Q6

프로세스 적재 정책과 관련한 설명으로 틀린 것은?

1반복스택부프로그램은, , 시간 지역성(Temporal Locality)과 관련이 있다.
2공간 지역성(Spatial Locality)은 프로세스가 어떤 페이지를 참조했다면 이후 가상주소 공간상 그 페이지와 인접한 페이지 들을 참조할 가능성이 높음을 의미한다.
3일반적으로 페이지 교환에 보내는 시간보다 프로세스 수행에 보내는 시간이 더 크면 스레싱(Thrashing)이 발생한다.
4스레싱(Thrashing) 현상을 방지하기 위해서는 각 프로세스가 필요로 하는 프레임을 제공할 수 있어야 한다.
정답 3번 · 일반적으로 페이지 교환에 보내는 시간보다 프로세스 수행에 보내는 시간이 더 크면 스레싱(Thrashing)이 발생한다.

핵심 해설

스레싱(Thrashing)은 다중 프로그래밍 정도가 지나쳐 각 프로세스에 할당된 프레임이 워킹 셋보다 부족해지면서, CPU가 실제 프로세스 수행보다 페이지 교체(스왑 인·아웃)에 더 많은 시간을 쓰는 현상이다. 즉 '프로세스 수행 시간 < 페이지 교체 시간'일 때 스레싱이며, 3번은 부등호가 반대로 뒤집혀 있어 틀렸다. 스레싱은 지역성(Locality) 원리에 기반한 워킹 셋 기법이나 페이지 부재 빈도(PFF) 기법으로 각 프로세스에 충분한 프레임을 보장해 방지한다. 지역성에는 반복문·부프로그램·스택처럼 최근 참조한 항목을 다시 참조하는 시간 지역성과, 배열 순회처럼 인접 주소를 참조하는 공간 지역성이 있다.

보기별 해설

1. 반복(Loop)·스택·부프로그램(서브루틴)은 시간 지역성의 대표 사례로 옳은 설명이다. 한 번 참조한 기억 장소를 짧은 시간 안에 다시 참조하는 성질이며, 보기의 어절 순서가 뒤엉킨 것은 PDF 추출 잡음으로 원문은 '반복, 스택, 부프로그램은 시간 지역성과 관련이 있다'이다.
2. 공간 지역성은 어떤 페이지를 참조하면 그와 인접한 주소의 페이지를 곧이어 참조할 가능성이 높다는 성질로 옳은 설명이다. 배열 순회나 순차적 코드 실행이 대표 사례이다.
3. 스레싱 조건의 부등호가 반대로 뒤집혀 틀렸다. 프로세스 수행 시간보다 페이지 교체에 보내는 시간이 더 클 때가 스레싱이며, 수행 시간이 더 크다면 오히려 정상적으로 잘 동작하는 상태이다.
4. 각 프로세스에 필요한 프레임을 제공해야 스레싱을 막을 수 있다는 것도 옳다. 워킹 셋 기법으로 자주 참조되는 페이지 집합만큼의 프레임을 확보하거나, 페이지 부재 빈도(PFF)를 감시해 프레임 수를 조절한다.

정리

스레싱 = 페이지 교체 시간 > 프로세스 수행 시간. 원인은 프레임 부족(과도한 다중 프로그래밍), 대책은 워킹 셋·PFF 기법. 지역성은 시간(반복·스택·부프로그램)과 공간(배열·순차 접근)으로 나뉜다.
#프로그래밍언어활용#프로세스
Q7

다음은 정수 배열 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); } }

1java.lang
2java.util
3java.io
4java.net
정답 2번 · java.util

핵심 해설

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이다.

보기별 해설

1. java.lang은 String, System, Math, Integer 같은 기본 클래스가 들어 있는 패키지로, 유일하게 import 없이 자동으로 포함된다. Random 클래스는 여기에 없다.
2. java.util은 Random을 비롯해 Scanner, ArrayList, HashMap, Date 같은 유틸리티·컬렉션 클래스가 모인 패키지이다. Random 객체를 쓰려면 이 패키지를 import해야 하므로 괄호에 들어갈 답이다.
3. java.io는 파일과 스트림 입출력을 담당하는 패키지로 File, BufferedReader, InputStreamReader, FileWriter 등이 속한다. 난수 생성과는 관계가 없다.
4. java.net은 네트워크 통신용 패키지로 Socket, ServerSocket, URL, InetAddress 등이 들어 있다. 역시 Random 클래스와는 무관하다.

정리

Random·Scanner·ArrayList·HashMap → java.util. String·System·Math → java.lang(자동 import). 파일 입출력 → java.io, 소켓·URL → java.net. nextInt(10)은 0~9를 반환한다.
#프로그래밍언어활용
Q8

리눅스 Bash 쉘(Shell)에서 export와 관련한 설명으로 틀린 것은?

1변수를 출력하고자 할 때는 export를 사용해야 한다.
2export가 매개변수 없이 쓰일 경우 현재 설정된 환경변수들이 출력된다.
3사용자가 생성하는 변수는 export 명령어로 표시하지 않는 한 현재 쉘에 국한된다.
4변수를 export 시키면 전역(Global)변수처럼 되어 끝까지 기 억된다.
정답 1번 · 변수를 출력하고자 할 때는 export를 사용해야 한다.

핵심 해설

리눅스 Bash에서 export는 현재 쉘의 변수를 환경변수로 승격시켜, 이 쉘에서 파생되는 자식 프로세스(하위 쉘)까지 그 값을 물려받게 하는 명령이다. export 없이 만든 변수는 현재 쉘에만 존재하는 지역 변수여서 자식 프로세스에서는 보이지 않는다. 매개변수 없이 export만 입력하면 현재 설정된 환경변수 목록이 출력되고, export -p로도 확인할 수 있다. 변수의 값을 화면에 출력할 때 쓰는 명령은 echo $변수명(또는 printf)이므로, '변수를 출력하려면 export를 써야 한다'는 1번이 틀린 설명이다.

보기별 해설

1. 변수를 출력할 때 export를 써야 한다는 서술이 틀렸다. 변수 값 출력은 echo $변수명이나 printf로 하며, export는 변수를 자식 프로세스에 상속되는 환경변수로 만드는 명령이다.
2. 매개변수 없이 export만 실행하면 현재 설정된 환경변수들이 출력되는 것이 맞다. export -p를 쓰면 declare -x 형식으로 같은 목록을 볼 수 있다.
3. 사용자가 만든 변수는 export로 표시하지 않는 한 현재 쉘에만 국한된다는 설명도 옳다. 지역 변수 상태에서는 하위 쉘이나 실행한 스크립트에서 그 값을 참조할 수 없다.
4. export한 변수가 전역 변수처럼 쓰인다는 설명도 옳다. 해당 쉘과 그 이후 생성되는 모든 자식 프로세스가 값을 물려받으며, 영구적으로 유지하려면 ~/.bashrc나 /etc/profile에 등록한다.

정리

export = 지역 변수를 환경변수로 승격해 자식 프로세스에 상속. 인자 없이 실행하면 환경변수 목록 출력. 값 출력은 echo $VAR, 해제는 unset VAR.
#프로그래밍언어활용
Q9

다음 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); } }

10
24
35
47
정답 2번 · 4

핵심 해설

후위 감소 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로 실행해 확인함).

보기별 해설

1. 0은 모든 반복에서 continue가 걸려 y가 한 번도 증가하지 않는 경우의 값이다. 실제로는 x가 5, 4, 2, 1일 때 3으로 나누어떨어지지 않아 y++가 네 번 실행된다.
2. 4는 검사 대상 x 값 6,5,4,3,2,1,0 중 3의 배수인 6·3·0을 제외한 5·4·2·1의 개수로 추적 결과와 일치한다. 후위 감소이므로 조건식 통과 후 감소한 값이 if문에서 쓰인다는 점이 핵심이다.
3. 5는 continue가 두 번만 걸린다고 본 값이다. 0도 0%3==0으로 3의 배수 취급되어 continue되므로 제외 대상은 6, 3, 0의 세 개이다.
4. 7은 초기 x 값이자 continue가 한 번도 걸리지 않고 7회 모두 증가했을 때의 값이다. 실제 반복 횟수는 x가 0이 될 때까지의 7회이지만 그중 3회는 y++를 건너뛴다.

정리

while(x-- > 0)은 '검사 후 감소'이므로 본문에서 쓰이는 x는 이미 1 줄어든 값이다. x=7 시작 → 본문의 x는 6,5,4,3,2,1,0이고 3의 배수 3개를 건너뛰어 y=4.
#프로그래밍언어활용
Q10

TCP/IP 프로토콜에서 TCP가 해당하는 계층은?

1데이터 링크 계층
2네트워크 계층
3트랜스포트 계층
4세션 계층
정답 3번 · 트랜스포트 계층

핵심 해설

TCP/IP 프로토콜 스택은 네트워크 액세스 계층, 인터넷 계층, 전송(트랜스포트) 계층, 응용 계층의 4계층으로 구성된다. TCP(Transmission Control Protocol)는 이 중 전송 계층에 속하며, OSI 7계층으로는 4계층인 전송 계층에 대응한다. TCP는 3-way handshake로 연결을 설정하는 연결 지향형 프로토콜로, 순서 번호와 확인 응답(ACK), 재전송, 슬라이딩 윈도우를 통한 흐름 제어와 혼잡 제어로 신뢰성 있는 전송을 보장한다. 같은 계층의 UDP는 비연결형으로 신뢰성 대신 속도를 택한 프로토콜이다.

보기별 해설

1. 데이터 링크 계층은 OSI 2계층으로 인접 노드 간 프레임 전달과 MAC 주소 기반 매체 접근 제어를 담당한다. TCP/IP 모델에서는 물리 계층과 합쳐져 네트워크 액세스 계층이라 부르며 이더넷, PPP 등이 여기에 속한다.
2. 네트워크 계층은 TCP/IP에서 인터넷 계층에 해당하며 IP, ICMP, IGMP, ARP, RARP가 속한다. 논리 주소 지정과 라우팅을 담당할 뿐 TCP가 속한 계층은 아니다.
3. 트랜스포트(전송) 계층이 TCP가 속한 계층이다. 포트 번호로 프로세스를 식별하며, TCP는 연결형·신뢰성 전송을, UDP는 비연결형·고속 전송을 제공한다.
4. 세션 계층은 OSI 5계층으로 통신 세션의 설정·유지·종료와 동기점 관리를 담당한다. TCP/IP 4계층 모델에는 세션 계층이 별도로 없고 응용 계층에 흡수되어 있다.

정리

TCP/IP 4계층 — 네트워크 액세스(이더넷), 인터넷(IP·ICMP·ARP), 전송(TCP·UDP), 응용(HTTP·FTP·DNS). TCP는 전송 계층 = OSI 4계층.
#프로그래밍언어활용#TCP/IP#네트워크
Q11

Java에서 사용되는 출력 함수가 아닌 것은?

1System.out.print( )
2System.out.println( )
3System.out.printing( )
4System.out.printf( ) - 5
정답 3번 · System.out.printing( )

핵심 해설

Java의 표준 출력은 System.out 객체(PrintStream 타입)의 메소드를 통해 이루어지며, 사용할 수 있는 것은 print(), println(), printf(), write() 등이다. print()는 줄 바꿈 없이 출력하고, println()은 출력 후 줄을 바꾸며, printf()는 C의 printf처럼 %d·%s·%f 같은 서식 지정자를 사용해 형식을 맞춰 출력한다. 반면 printing()이라는 메소드는 PrintStream 클래스에 존재하지 않으므로 호출하면 'cannot find symbol' 컴파일 오류가 발생한다.

보기별 해설

1. System.out.print()는 인수를 출력한 뒤 줄을 바꾸지 않는 정상적인 출력 메소드이다. 여러 번 호출하면 같은 줄에 이어서 출력된다.
2. System.out.println()은 인수를 출력하고 줄 바꿈까지 수행하는 메소드이다. 인수 없이 println()만 호출하면 빈 줄 하나가 출력된다.
3. System.out.printing()은 Java에 존재하지 않는 메소드이다. PrintStream 클래스에 그런 이름이 없어 호출하면 'cannot find symbol' 컴파일 오류가 나며, 올바른 이름은 println()이다.
4. System.out.printf()는 서식 문자열을 이용해 출력하는 메소드로 실제로 존재한다. %d(정수), %s(문자열), %f(실수), %n(줄 바꿈) 같은 지정자를 쓰며, 보기 끝의 '- 5'는 PDF 추출 시 끼어든 쪽 번호 잡음이다.

정리

Java 출력 메소드 — print(줄 바꿈 없음), println(줄 바꿈 포함), printf(서식 지정), write(바이트 출력). printing()은 존재하지 않는다.
#프로그래밍언어활용
Q12

다음의 페이지 참조 열(Page reference)에 대해 페이지 교체 기법으 로 선입선출 알고리즘을 사용할 경우 페이지 부재(Page Fault) 횟수 는? (단할당된, 페이지 프레임 수는 3이고처음에는, 모든 프레임이 비어 있다.) <페이지 참조열> 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0

113
214
315
420
정답 2번 · 14

핵심 해설

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회이다.

보기별 해설

1. 13은 적중을 6회로 잘못 세었을 때 나오는 값이다. 적중이 일어나는 지점은 5번째 0, 12번째 3, 13번째 2, 16번째 0, 17번째 1의 다섯 번뿐이므로 19 - 5 = 14가 맞다.
2. 14가 위 추적 결과와 일치한다. 총 참조 19회에서 적중 5회를 뺀 값이며, 처음 세 번은 빈 프레임을 채우는 강제 부재(compulsory fault)이다.
3. 15는 적중을 4회로 잘못 센 경우의 값이다. 특히 12번째 3과 13번째 2는 직전 프레임 상태가 [2,3,0]이어서 둘 다 이미 적재되어 있으므로 모두 적중이다.
4. 20은 참조열 길이인 19보다도 큰 값이므로 성립할 수 없다. 페이지 부재 횟수는 어떤 알고리즘에서도 총 참조 횟수를 넘지 못한다.

정리

FIFO는 적재된 지 가장 오래된 페이지를 희생시킨다. 프레임 3개 / 참조열 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0 → 부재 14회(적중 5회). 프레임을 늘려도 부재가 늘 수 있는 벨레이디의 모순이 FIFO의 약점이다.
#프로그래밍언어활용
Q13

배치 프로그램의 자동 수행 주기 중 사용자가 특정 조건을 설정해 두고 해당 조건이 충족될 때만 수행되도록 하는 것은?

1정기 배치
2이벤트성 배치
3On-Demand 배치
4사용자 배치
정답 2번 · 이벤트성 배치

핵심 해설

배치 프로그램(Batch Program)은 사용자와의 상호작용 없이 대량의 데이터를 일괄 처리하는 프로그램이며, 수행 방식에 따라 정기 배치, 이벤트성 배치, On-Demand 배치로 나뉜다. 이 중 이벤트성 배치는 특정 조건(임계치 초과, 파일 도착, 상태 변화 등)을 미리 설정해 두고 그 조건이 충족되는 순간에만 실행되는 방식이다. 반면 정기 배치는 시간(일·주·월) 기준으로 주기적으로, On-Demand 배치는 사용자의 요청이 있을 때 즉시 실행된다. 문제의 '특정 조건 설정 후 충족될 때만 수행'이라는 서술이 곧 이벤트성 배치의 정의이다.

보기별 해설

1. 정기 배치는 매일 자정, 매주 월요일, 매월 말일처럼 정해진 시점에 주기적으로 수행되는 배치이다. 조건 충족 여부가 아니라 시각·주기가 실행의 기준이다.
2. 이벤트성 배치는 미리 정의한 조건이 충족되었을 때만 실행되는 배치이다. 특정 파일이 도착하거나 임계치를 넘어서는 등 사건 발생이 방아쇠가 되므로 실행 시점이 고정되어 있지 않다.
3. On-Demand 배치는 사용자나 외부 시스템의 요청이 들어오는 즉시 수행되는 배치이다. 조건 감시가 아니라 요청 발생이 실행 기준이라는 점에서 이벤트성 배치와 구분된다.
4. 사용자 배치는 배치 수행 주기의 표준 분류에 포함되지 않는 용어이다. 정기·이벤트성·On-Demand 세 가지가 정식 분류이며, 사용자 요청 기반 실행은 On-Demand 배치가 담당한다.

정리

배치 수행 주기 3분류 — 정기 배치(정해진 시점·주기), 이벤트성 배치(사전 정의 조건 충족 시), On-Demand 배치(요청 즉시).
#프로그래밍언어활용
Q14

다음 Python 코드 출력문의 결과는? print(4, 1, 2, sep=',', end='') print(3, 5, sep='/')

14,1,23/5
24 1 23/5
34,1,2
44 1 2 3/5 3 5
정답 1번 · 4,1,23/5

핵심 해설

파이썬 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로 실행해 확인함).

보기별 해설

1. 4,1,23/5가 실제 출력이다. 첫 print가 sep=','로 '4,1,2'를 내고 end=''로 줄 바꿈을 없앤 뒤, 두 번째 print의 '3/5'가 곧바로 이어 붙는다.
2. 4 1 23/5는 첫 print의 sep을 기본값인 공백으로 잘못 본 결과이다. sep=','가 명시되어 있으므로 인수 사이는 공백이 아니라 쉼표로 연결된다.
3. 4,1,2는 첫 번째 print의 출력만 적은 것이다. 두 번째 print(3, 5, sep='/')도 실행되어 '3/5'가 같은 줄에 이어지므로 여기서 끝나지 않는다.
4. 4 1 2 3/5 3 5는 sep 지정을 무시하고 인수까지 중복 출력한 형태이다. print는 각 호출마다 인수를 한 번씩만 출력하므로 3과 5가 두 번 나올 수 없다.

정리

print(sep, end) — sep는 인수 사이 구분자(기본 공백), end는 출력 후 덧붙일 문자열(기본 줄 바꿈 '\n'). end=''를 주면 다음 출력이 같은 줄에 이어진다.
#프로그래밍언어활용#Python
Q15

JAVA의 예외(exception)와 관련한 설명으로 틀린 것은?

1문법 오류로 인해 발생한 것
2오동작이나 결과에 악영향을 미칠 수 있는 실행 시간 동안에 발생한 오류
3배열의 인덱스가 그 범위를 넘어서는 경우 발생하는 오류
4존재하지 않는 파일을 읽으려고 하는 경우에 발생하는 오류
정답 1번 · 문법 오류로 인해 발생한 것

핵심 해설

Java에서 예외(Exception)는 프로그램이 실행되는 도중(runtime)에 발생해 정상 흐름을 방해하는 사건으로, try~catch~finally나 throws로 처리할 수 있는 대상이다. 배열 인덱스 초과(ArrayIndexOutOfBoundsException), 존재하지 않는 파일 접근(FileNotFoundException), 0으로 나누기(ArithmeticException), null 참조(NullPointerException) 등이 대표적인 예외이다. 반면 문법 오류(Syntax Error)는 컴파일 단계에서 javac가 잡아내는 컴파일 오류로, 실행 자체가 불가능하므로 예외가 아니다. 따라서 '문법 오류로 인해 발생한 것'이라는 1번이 예외 설명으로 틀렸다.

보기별 해설

1. 문법 오류로 인해 발생한 것은 예외가 아니라 컴파일 오류이다. 세미콜론 누락이나 괄호 불일치처럼 javac가 컴파일 단계에서 잡아내므로 실행 자체가 되지 않고, try~catch로 처리할 수도 없다.
2. 실행 시간 동안 발생해 오동작이나 결과에 악영향을 미치는 오류라는 것이 예외의 정의로 옳다. 컴파일은 통과했지만 실행 중에 발생하며 Throwable의 하위 클래스인 Exception 계열로 표현된다.
3. 배열 인덱스가 범위를 넘어서는 경우는 ArrayIndexOutOfBoundsException으로 대표적인 실행 시간 예외이다. RuntimeException의 하위 클래스여서 처리를 강제하지 않는 unchecked exception에 속한다.
4. 존재하지 않는 파일을 읽으려는 경우는 FileNotFoundException(IOException의 하위)으로 역시 예외에 해당한다. 컴파일러가 처리 여부를 검사하는 checked exception이라 try~catch나 throws로 반드시 다뤄야 한다.

정리

컴파일 오류(문법 오류)는 실행 전에 javac가 잡고, 예외(Exception)는 실행 중에 발생해 try~catch~finally나 throws로 처리한다. checked(IOException 등)와 unchecked(RuntimeException 계열)로 나뉜다.
#프로그래밍언어활용#Java
Q16

다음은 파이썬으로 만들어진 반복문 코드이다이. 코드의 결과는? while(True) : print('A') print('B') break print('C') print('D')

1A, B 출력이 반복된다.
2A, B, C 까지만 출력된다.
3A, B, C 출력이 반복된다.
4A, B, D 까지만 출력된다.
정답 4번 · A, B, 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로 확인함).

보기별 해설

1. A, B 출력이 반복된다는 것은 break가 없을 때의 결과이다. while(True)는 무한 루프이지만 break가 첫 회차에서 실행되므로 반복이 한 번만 돌고 끝난다.
2. A, B, C까지만 출력된다는 것은 print('C')가 break 앞에 있거나 반복문 밖에 있고 D가 없을 때의 결과이다. C는 break 뒤 같은 블록에 있어 도달 자체가 불가능하며, 블록 밖의 D는 반드시 실행된다.
3. A, B, C 출력이 반복된다는 것은 break가 아예 없는 무한 루프일 때의 모습이다. break가 존재해 첫 회차에서 반복을 종료하므로 반복도 C 출력도 일어나지 않는다.
4. A, B, D까지만 출력된다가 실제 결과이다. 반복문 안에서 A와 B를 출력한 뒤 break로 즉시 탈출하므로 뒤따르는 print('C')는 실행되지 않고, 반복문 밖의 print('D')만 이어서 실행된다.

정리

break는 반복문을 즉시 빠져나가므로 같은 블록에서 break 뒤에 오는 문장은 도달 불가 코드가 되어 실행되지 않는다. 파이썬은 들여쓰기가 곧 블록이므로 어디까지가 while 안인지 먼저 확인한다.
#프로그래밍언어활용
Q17

사용자 수준에서 지원되는 스레드(thread)가 커널에서 지원되는 스레드에 비해 가지는 장점으로 옳은 것은?

1한 프로세스가 운영체제를 호출할 때 전체 프로세스가 대기할 필요가 없으므로 시스템 성능을 높일 수 있다.
2동시에 여러 스레드가 커널에 접근할 수 있으므로 여러 스레드 가 시스템 호출을 동시에 사용할 수 있다.
3각 스레드를 개별적으로 관리할 수 있으므로 스레드의 독립적 인 스케줄링이 가능하다.
4커널 모드로의 전환 없이 스레드 교환이 가능하므로 오버헤드 가 줄어든다.
정답 4번 · 커널 모드로의 전환 없이 스레드 교환이 가능하므로 오버헤드 가 줄어든다.

핵심 해설

사용자 수준 스레드(User-Level Thread)는 커널이 아니라 사용자 공간의 스레드 라이브러리가 생성·스케줄링·문맥 교환을 모두 처리하는 방식이다. 커널은 이를 하나의 프로세스로만 인식하므로 스레드를 바꿀 때 커널 모드로 전환할 필요가 없고, 그만큼 문맥 교환 오버헤드가 작아 생성과 전환이 매우 빠르다. 대신 커널이 개별 스레드를 알지 못해 한 스레드가 시스템 호출로 블록되면 프로세스 전체가 멈추고, 다중 프로세서에서 병렬 실행도 불가능하다. 나머지 보기들은 모두 커널 수준 스레드(Kernel-Level Thread)의 장점이므로, 사용자 수준 스레드의 장점은 4번이다.

보기별 해설

1. 한 프로세스가 운영체제를 호출할 때 전체 프로세스가 대기하지 않는다는 것은 커널 수준 스레드의 장점이다. 사용자 수준 스레드는 커널이 스레드를 구분하지 못해 한 스레드의 블로킹 시스템 호출에 프로세스 전체가 멈춘다.
2. 여러 스레드가 동시에 커널에 접근해 시스템 호출을 병행할 수 있다는 것도 커널 수준 스레드의 특징이다. 사용자 수준 스레드는 커널 입장에서 단일 실행 흐름이라 시스템 호출을 동시에 수행할 수 없다.
3. 각 스레드를 개별적으로 관리해 독립적으로 스케줄링한다는 것은 커널이 스레드 단위로 스케줄링하는 커널 수준 스레드의 특징이다. 사용자 수준에서는 커널이 프로세스 단위로만 CPU를 배분한다.
4. 커널 모드 전환 없이 스레드 교환이 가능해 오버헤드가 줄어든다는 것이 사용자 수준 스레드의 대표적 장점이다. 라이브러리가 사용자 공간에서 문맥 교환을 처리하므로 모드 전환 비용이 들지 않아 생성·전환이 빠르다.

정리

사용자 수준 스레드 = 라이브러리가 관리, 모드 전환 없어 빠름 / 단점은 하나가 블록되면 전체 정지·다중 CPU 활용 불가. 커널 수준 스레드 = 커널이 개별 스케줄링, 블로킹·병렬 처리에 강하나 문맥 교환 오버헤드가 큼.
#프로그래밍언어활용#스케줄링#스레드#프로세스
Q18

다음 중 페이지 교체(Page Replacement) 알고리즘이 아닌 것은?

1LRU
2OPT
3NUR
4SCF 5
정답 4번 · SCF 5

핵심 해설

페이지 교체(Page Replacement) 알고리즘은 페이지 부재가 발생했을 때 주기억장치의 어느 페이지를 내보낼지 결정하는 기법으로 OPT, FIFO, LRU, LFU, NUR, SCR(2차 기회) 등이 있다. 반면 SCF는 디스크 스케줄링의 SCAN·C-SCAN·SSTF나 SJF와 혼동하기 쉽게 만든 이름으로, 페이지 교체 알고리즘 목록에는 존재하지 않는 용어이다. 보기 끝의 '5'는 PDF 추출 과정에서 끼어든 쪽 번호 잡음이다. 따라서 페이지 교체 알고리즘이 아닌 것은 SCF이다.

보기별 해설

1. LRU(Least Recently Used)는 가장 오랫동안 참조되지 않은 페이지를 교체하는 알고리즘이다. 지역성을 잘 반영해 성능이 우수하지만 각 페이지의 최근 참조 시각을 계속 기록해야 해 오버헤드가 있다.
2. OPT(OPTimal)는 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체하는 이론상 최적 알고리즘이다. 미래의 참조 순서를 미리 알아야 해 실제 구현은 불가능하며 다른 알고리즘의 성능 비교 기준으로 쓰인다.
3. NUR(Not Used Recently)는 최근에 사용하지 않은 페이지를 교체하는 알고리즘이다. 참조 비트와 변형 비트 두 개만으로 (0,0)→(0,1)→(1,0)→(1,1) 순서의 우선순위를 정해, LRU와 비슷한 효과를 훨씬 적은 비용으로 얻는다.
4. SCF는 페이지 교체 알고리즘에 존재하지 않는 용어이다. 디스크 스케줄링의 SCAN·C-SCAN·SSTF나 프로세스 스케줄링의 SJF와 혼동하도록 만든 보기이며, 끝에 붙은 '5'는 PDF 추출 시 섞인 쪽 번호 잡음이다.

정리

페이지 교체 알고리즘 — OPT(최적, 이론), FIFO(선입선출), LRU(최근 최소 사용), LFU(사용 빈도 최소), NUR(참조·변형 비트), SCR(2차 기회). SCF는 없는 용어이다.
#프로그래밍언어활용
Q19

프레임워크(Framework)에 대한 설명으로 옳은 것은?

1소프트웨어 구성에 필요한 기본 구조를 제공함으로써 재사용 이 가능하게 해준다.
2소프트웨어 개발 시 구조가 잡혀 있기 때문에 확장이 불가능하다.
3소프트웨어 아키텍처(Architecture)와 동일한 개념이다.
4모듈화(Modularity)가 불가능하다.
정답 1번 · 소프트웨어 구성에 필요한 기본 구조를 제공함으로써 재사용 이 가능하게 해준다.

핵심 해설

소프트웨어 프레임워크(Framework)는 특정 영역의 응용을 개발할 때 필요한 기본 골격과 공통 기능을 미리 구현해 제공하는 반제품 형태의 소프트웨어이다. 개발자는 이 골격 위에 필요한 부분만 채워 넣으므로 재사용성과 개발 생산성이 높아지고, 품질과 유지보수성도 좋아진다. 프레임워크는 제어의 역흐름(IoC)에 따라 프레임워크가 개발자 코드를 호출하는 구조를 가지며, 모듈화와 확장 지점(hook)을 통해 기능을 덧붙일 수 있게 설계된다. 따라서 '기본 구조를 제공해 재사용을 가능하게 한다'는 1번이 옳은 설명이다.

보기별 해설

1. 소프트웨어 구성에 필요한 기본 구조를 제공해 재사용을 가능하게 한다는 것이 프레임워크의 핵심 정의로 옳다. 공통 기능을 미리 구현해 두고 개발자는 변하는 부분만 작성하므로 생산성과 품질이 함께 올라간다.
2. 구조가 잡혀 있어 확장이 불가능하다는 서술은 틀렸다. 프레임워크는 상속이나 인터페이스 구현 같은 확장 지점(hook)을 열어 두어, 정해진 규약 안에서 기능을 덧붙일 수 있도록 설계된다.
3. 소프트웨어 아키텍처와 동일한 개념이라는 서술도 틀렸다. 아키텍처는 시스템 구조에 대한 설계 개념·청사진이고, 프레임워크는 그 구조를 실제 코드로 구현해 제공하는 실체이므로 층위가 다르다.
4. 모듈화가 불가능하다는 서술 역시 틀렸다. 프레임워크는 기능을 독립적인 모듈과 컴포넌트로 나누어 제공하는 것이 기본 설계 원칙이며, 오히려 모듈화를 촉진해 결합도를 낮춘다.

정리

프레임워크 = 재사용 가능한 기본 골격을 코드로 제공하는 반제품 소프트웨어. 특징은 모듈화·재사용성·확장성·제어의 역흐름(IoC)이며, 설계 개념인 아키텍처와는 구분된다.
#프로그래밍언어활용
Q20

단편화(Fragmentation)와 재결합(Reassembly)에 대한 설명으로 옳지 않은 것은?

1단편화는 송신 측에서 전송할 데이터를 전송에 알맞은 일정 크기의 작은 블록으로 자르는 작업을 의미한다.
2재결합은 수신 측에서 단편화된 블록을 원래의 데이터로 모으 는 것이다.
3단편화를 통해 세분화된 데이터 블록을 프레임이라고 한다.
4단편화를 하면 전송 시간이 단축되고효과적인, 오류 제어가 가능하다.
정답 3번 · 단편화를 통해 세분화된 데이터 블록을 프레임이라고 한다.

핵심 해설

단편화(Fragmentation)는 송신 측이 전송할 데이터를 전송 매체가 감당할 수 있는 일정 크기의 작은 블록으로 나누는 작업이고, 재결합(Reassembly)은 수신 측이 그 블록들을 원래 데이터로 되돌리는 작업이다. 데이터를 작게 나누면 한 블록에서 오류가 나도 그 블록만 재전송하면 되므로 효과적인 오류 제어가 가능하고, 여러 블록을 병렬·파이프라인 방식으로 보낼 수 있어 전송 효율이 좋아진다. 다만 단편화로 세분화된 데이터 블록을 부르는 이름은 프레임이 아니라 패킷(또는 세그먼트, 프래그먼트)이다. 프레임은 데이터 링크 계층의 PDU 이름이므로 단편화 결과물의 일반 명칭으로 쓸 수 없어 3번이 옳지 않다.

보기별 해설

1. 단편화가 송신 측에서 데이터를 전송에 알맞은 크기의 작은 블록으로 자르는 작업이라는 설명은 옳다. IP에서는 링크의 MTU를 넘는 데이터그램을 나눌 때 이 과정을 수행한다.
2. 재결합이 수신 측에서 단편화된 블록을 원래 데이터로 모으는 작업이라는 설명도 옳다. IP는 식별자(Identification), 플래그, 단편 오프셋 필드를 이용해 조각의 순서와 마지막 조각 여부를 판단해 복원한다.
3. 단편화로 세분화된 블록을 프레임이라 부른다는 서술이 틀렸다. 이 블록의 일반적인 명칭은 패킷(세그먼트, 프래그먼트)이며, 프레임은 데이터 링크 계층에서 헤더와 트레일러를 붙인 PDU를 가리키는 별개의 용어이다.
4. 단편화로 전송 시간이 단축되고 효과적인 오류 제어가 가능하다는 설명은 옳다. 블록 단위로 나누면 오류가 난 블록만 재전송하면 되고 여러 블록을 이어서 보낼 수 있어 전체 전송 효율이 높아진다.

정리

단편화(송신 측 분할) ↔ 재결합(수신 측 복원). 나뉜 블록은 패킷이며 프레임은 데이터 링크 계층의 PDU 이름이다. 장점은 오류 제어 용이와 전송 효율 향상, 단점은 헤더 중복에 따른 오버헤드 증가이다.
#프로그래밍언어활용