2025년 1·2·3회 분석
정보처리기사 실기
기출분석 & 개념정리
60문항 완벽 분석 · 출제 빈도 · 핵심 개념 총정리
📊
출제 빈도 분석| 출제 영역 | 1회 | 2회 | 3회 | 합계 | 빈도 |
|---|---|---|---|---|---|
| C언어 | 3 | 3 | 3 | 9 | |
| Java | 4 | 3 | 2 | 9 | |
| Python | 1 | 1 | 1 | 3 | |
| SQL / DB | 3 | 2 | 3 | 8 | |
| 네트워크 / 보안 | 4 | 3 | 3 | 10 | |
| 소프트웨어 공학 | 3 | 2 | 2 | 7 | |
| OS / 스케줄링 | 1 | 1 | 1 | 3 | |
| 디자인패턴 | 1 | 1 | 0 | 2 |
⚠️ 2025년 핵심 트렌드
프로그래밍 문제가 전체의 약 60%를 차지하며, 특히 C언어 구조체+포인터+연결리스트, Java 상속+다형성+오버라이딩 난이도가 크게 상승했습니다. 단순 출력 문제보다 동적 메모리 할당, 비트 연산, 재귀함수 등 심화 문제가 증가하고 있습니다.🔧
1. C언어 핵심 개념🔗 포인터 (Pointer) 매회 출제
포인터는 메모리 주소를 저장하는 변수입니다. 2025년 3회 모두 포인터 문제가 출제되었으며, 특히 이중 포인터와 구조체 포인터가 자주 나왔습니다.
기본 문법
int a = 10;
int *p = &a; // p는 a의 주소를 저장
printf("%d", *p); // 10 출력 (*p는 a의 값)
int **pp = &p; // 이중 포인터: 포인터의 주소
printf("%d", **pp); // 10 출력
포인터 배열 vs 배열 포인터
포인터 배열 int *p[3]
포인터를 원소로 갖는 배열. 각 원소가 주소를 저장. 문자열 배열에 자주 사용.
배열 포인터 int (*p)[3]
배열 전체를 가리키는 포인터. 2차원 배열 접근 시 사용. p+1 하면 행 하나를 건너뜀.
자주 출제되는 패턴
// 패턴1: 전위/후위 증감 (1회, 3회 출제)
*++p → p를 먼저 증가, 그 위치의 값
++*p → p가 가리키는 값을 증가
*p++ → 현재 값 사용 후, p 증가
(*p)++ → p가 가리키는 값 사용 후, 그 값 증가
// 패턴2: 구조체 포인터 (매회 출제)
struct dat *ptr = a;
ptr->x → (*ptr).x와 동일
(ptr + 1)->y → 다음 구조체 원소의 y 접근
// 패턴3: 이중 포인터 (2회 출제)
struct dat **pptr = &ptr;
(*pptr)[1] = (*pptr)[2]; → ptr[1] = ptr[2]와 동일
// 패턴2: 구조체 포인터 (매회 출제)struct dat *ptr = a;
ptr->x → (*ptr).x와 동일
(ptr+1)->y → 다음 구조체 원소의 y 접근
// 패턴3: 이중 포인터 (2회 출제) struct dat **pptr = &ptr; (*pptr)[1] = (*pptr)[2]; → ptr[1] = ptr[2]와 동일
💡 시험 꿀팁
포인터 문제는 반드시 메모리 그림을 그려서 풀어야 합니다. 변수, 주소, 값을 표로 정리하면 실수를 줄일 수 있어요.📦 구조체 (Struct) 매회 출제
2025년 3회 모두 구조체 문제가 출제되었습니다. 특히 구조체 + 포인터 + 연결리스트 조합이 핵심입니다.
// 메모리 정렬 (패딩) - 1회 출제
struct STUDENT {
char check; // 1B → 패딩으로 8B
double score; // 8B
int math; // 4B → 패딩으로 8B
}; // sizeof = 24 (가장 큰 타입 기준 정렬)
메모리 정렬 규칙
| 가장 큰 타입 | 정렬 단위 | 예시 |
|---|---|---|
| double (8B) | 8바이트 | char+double+int → 8+8+8 = 24 |
| int (4B) | 4바이트 | char+int → 4+4 = 8 |
| short (2B) | 2바이트 | char+short → 2+2 = 4 |
🔗 연결리스트 (Linked List) 난이도 상승
2025년 1회, 2회, 3회 모두 연결리스트 문제가 출제되었습니다. 삽입, 삭제, 탐색, 역순 연산을 반드시 이해해야 합니다.
// 연결리스트 노드 앞에 삽입 (1회 출제)
Node* insert(Node* head, int value) {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->value = value;
new_node->next = head; // 새 노드가 기존 head를 가리킴
return new_node; // 새 노드가 새 head
}
// 결과: 5 → 4 → 3 → 2 → 1 (역순으로 쌓임)
// 문자열로 역순 연결리스트 (2회 출제)
// func("BEST") → T → S → E → B → 출력: TSEB
⚡ 비트 연산 & 16진수 필수 암기
// 비트 연산자 (1회, 3회 출제)
& AND: 둘 다 1이면 1
| OR: 하나라도 1이면 1
^ XOR: 서로 다르면 1
~ NOT: 비트 반전
<< 왼쪽 시프트 (×2)
>> 오른쪽 시프트 (÷2)
// 16진수 → 2진수 변환
0xA5 = 1010 0101
0xA0 = 1010 0000
0xA5 & 0xA0 = 1010 0000 = 0xA0 = 160
// 서식 지정자
%d → 10진수
%x → 16진수(소문자)
%o → 8진수
%04x → 16진수 4자리 (0 채움)
📚 스택 & 큐 매회 출제
스택 (Stack) - LIFO
후입선출. push로 넣고 pop으로 꺼냄. 가장 나중에 넣은 것이 먼저 나옴.
큐 (Queue) - FIFO
선입선출. enqueue로 넣고 dequeue로 꺼냄. 원형 큐는 % SIZE로 인덱스 순환.
// 원형 큐 (2회 출제)
void enq(Queue* q, int val) {
q->a[q->rear] = val;
q->rear = (q->rear + 1) % SIZE; // 순환!
}
int deq(Queue* q) {
int val = q->a[q->front];
q->front = (q->front + 1) % SIZE;
return val;
}
void enq(Queue* q, int val) {
q->a[q->rear] = val;
q->rear = (q->rear + 1) % SIZE; // 순환!
}
int deq(Queue* q) {
int val = q->a[q->front];
q->front = (q->front + 1) % SIZE;
return val;
}
☕
2. Java 핵심 개념🏗️ 상속 & 다형성 & 오버라이딩 매회 출제
2025년 가장 어려운 Java 문제들은 모두 상속 + 생성자 호출 순서 + 오버라이딩 조합입니다.
// 핵심 규칙
1. 자식 객체 생성 → 부모 생성자가 먼저 실행
2. 오버라이딩 메서드 → 항상 자식 것 호출 (동적 바인딩)
3. static 메서드 → 오버라이딩 불가 (참조 타입 기준)
4. super → 부모 생성자 호출
// 2회 출제 패턴
Parent ref = new Child();
ref.x(2) → Child의 x() (동적 바인딩)
ref.id() → Parent의 id() (static, 정적 바인딩)
// 결과: 5P
생성자 호출 순서 (1회 13번 유형)
class Parent {
static int total = 0;
int v = 1;
Parent() {
total += (++v); // v=2, total=2
show(); // ★ Child.show() 호출!
}
void show() {
total += total;
}
}
class Child extends Parent {
int v = 10;
Child() {
v += 2;
total += v++;
show();
}
void show() {
total += total * 2;
}
}
// new Child() → total = 54
⚠️ 주의
부모 생성자에서 show() 호출 시 오버라이딩된 자식의 show()가 실행됩니다! 자식의 인스턴스 변수는 아직 초기화 전(기본값 0)입니다.🛡️ 예외 처리 (try-catch-finally) 필수
try {
// 예외 발생 가능 코드
} catch (ArithmeticException e) {
// 0으로 나누기 등 산술 오류
} catch (ArrayIndexOutOfBoundsException e) {
// 배열 범위 초과
} catch (Exception e) {
// 위에서 안 잡힌 모든 예외
} finally {
// 예외 여부 관계없이 항상 실행!
}
// 1회: a/b (b=0) → ArithmeticException → "출력1출력5"
⚙️ 인터페이스 & 람다 & enum 신유형
// 인터페이스 구현 (3회)
interface Machine {
void run();
}
class WashingMachine implements Machine {
...
}
// 람다 (2회)
interface F {
int apply(int x) throws Exception;
}
F f = (x) -> {
if (x > 2) throw new Exception();
return x * 2;
};
// enum (3회)
enum Tri {
A("A"),
B("AB"),
C("ABC");
}
Tri.values() → {A, B, C}
Tri.A.name().length() → 1
Tri.values()[1].code() → "AB"
📎 객체 참조 vs 값 전달 필수
// 2회 출제 패턴
void change(String[] data, String s) {
data[0] = s; // 배열 = 참조 → 원본 변경
s = "Z"; // String = 불변 → 원본 유지
}
// 결과:
// data[0] = "B", s = "B"
// 출력: BB
💡 핵심 규칙
배열·객체 → 참조 전달(원본 바뀜) / 기본형·String → 값 전달(원본 유지)🐍
3. Python 핵심 개념📋 리스트, 딕셔너리, 집합 매회 1문항
# 딕셔너리 컴프리헨션 (2회)
lst = [1, 2, 3]
dst = {i: i * 2 for i in lst} # {1:2, 2:4, 3:6}
s = set(dst.values()) # {2, 4, 6}
# enumerate (3회)
for index, item in enumerate(data):
# index = 0,1,2..., item = 리스트 원소
# 집합 연산
s & t # 교집합
s | t # 합집합
s - t # 차집합
🗄️
4. SQL & 데이터베이스📊 릴레이션 용어 매회 출제
| 용어 | 의미 | 동의어 |
|---|---|---|
| Attribute | 열(Column), 속성 | 필드 |
| Tuple | 행(Row), 레코드 | 레코드 |
| Degree | 속성(열)의 개수 | 차수 |
| Cardinality | 튜플(행)의 개수 | 기수 |
| Domain | 속성이 가질 수 있는 값의 범위 | - |
| Foreign Key | 다른 릴레이션의 기본키를 참조 | 외래키 |
📝 SQL 핵심 문법 필수
-- 조인 (1회)
SELECT name, incentive
FROM emp, sal
WHERE emp.id = sal.id
AND incentive >= 500;
-- COUNT와 NULL (3회)
SELECT COUNT(col2)
FROM A
WHERE col1 IN (2, 3)
OR col2 IN (3, 5);
-- 관계대수 (2회)
π(employee) → 특정 열만 추출 (중복 제거)
⚠️ COUNT 함수 주의
COUNT(*) → NULL 포함 모든 행COUNT(컬럼명) → NULL인 행은 제외!
🔑 무결성 제약조건 1회, 3회
| 제약조건 | 설명 |
|---|---|
| 개체 무결성 | 기본키는 NULL이나 중복 불가 |
| 참조 무결성 | 외래키는 참조 테이블의 기본키 값이거나 NULL |
| 도메인 무결성 | 속성 값이 정의된 범위에 포함 |
➗ 관계대수 3회 출제
| 연산 | 기호 | 설명 |
|---|---|---|
| 프로젝션 | π | 특정 열만 추출 (중복 제거) |
| 셀렉션 | σ | 조건에 맞는 행만 추출 |
| 나누기 | ÷ | S의 모든 튜플을 포함하는 R의 튜플 |
| 조인 | ⋈ | 공통 속성으로 결합 |
🔒
5. 네트워크 & 보안🌐 네트워크 프로토콜 매회 출제
| 프로토콜 | 설명 | 출제 |
|---|---|---|
| ARP | IP → MAC 주소 변환 | 1회 |
| RARP | MAC → IP 주소 변환 | 1회 |
| SSH | 암호화 원격 접속 (포트 22), Telnet 대체 | 2회 |
| AJAX | 비동기 웹 데이터 교환 | 2회 |
| OAuth | 권한 위임 (소셜 로그인) | 3회 |
| OTP | 일회용 비밀번호 | 3회 |
🛡️ 보안 공격 기법 필수 암기
| 공격명 | 설명 |
|---|---|
| 세션 하이재킹 | TCP 3-way handshake 후 세션 탈취 |
| SYN Flooding | SYN 대량 전송 + ACK 미응답 → 서버 마비 |
| 스캐어웨어 | 가짜 바이러스 경고로 금전 요구 |
📡 서브넷 마스크 계산 1회, 2회
// 풀이법 (2회 출제)
IP: 223.13.234.132
서브넷: 255.255.255.192
// Step 1
192 = 1100 0000 → 호스트 비트 6개
// Step 2
132 AND 192 = 128
→ 네트워크 주소: 223.13.234.128
// Step 3
2^6 - 2 = 62 → 사용 가능 호스트 수
🔍 오류 검출 기법 1회, 3회
| 기법 | 설명 | 분류 |
|---|---|---|
| Hamming | 오류 검출 + 수정 가능 | FEC (전방향) |
| CRC | 다항식 나눗셈 기반 검출 | BEC (역방향) |
| Parity | 1비트 검사 비트 추가 | BEC |
FEC (전방향)
수신측 자체 수정. 재전송 불필요. 해밍 코드.
BEC (역방향)
오류 시 NAK → 재전송 요청. CRC, Parity.
🔐 접근통제 모델 3회
| 모델 | 설명 | 특징 |
|---|---|---|
| MAC | 중앙 관리, 보안 등급 기반 | 군사/기밀, 변경 불가 |
| DAC | 소유자가 직접 권한 설정 | 유연, 보안성 낮음 |
| RBAC | 역할(Role) 기반 | 관리 용이 |
📐
6. 소프트웨어 공학🎨 디자인 패턴 1회, 2회
| 분류 | 패턴 | 핵심 키워드 |
|---|---|---|
| 생성 | Singleton | 인스턴스 1개만 |
| Factory Method | 서브클래스에 생성 위임 | |
| Abstract Factory | 관련 객체 군 생성 | |
| Builder | 단계별 생성 | |
| Prototype | 복제 | |
| 구조 | Adapter ★ | 인터페이스 변환, wrapper |
| Proxy ★ | 대리 객체, 접근 제어 | |
| Bridge | 구현/추상 분리 | |
| Composite | 트리, 부분-전체 | |
| Decorator | 기능 동적 추가 | |
| 행위 | Observer | 상태 변화 알림 |
| Strategy | 알고리즘 교체 | |
| Template Method | 골격 정의 | |
| Command | 요청 캡슐화 |
🔗 결합도 1회
약→강 순서 (낮을수록 좋음)
| 결합도 | 설명 |
|---|---|
| 자료(Data) | 단순 데이터 전달 |
| 스탬프(Stamp) | 자료구조 전달 |
| 제어(Control) | 플래그 전달 |
| 외부(External) | 외부 변수 공유 |
| 공통(Common) | 전역 변수 공유 |
| 내용(Content) | 내부 변수 직접 접근 |
💡 암기법
결합도 약→강: "자스제외공내"✅ 테스트 커버리지 매회 출제
| 커버리지 | 설명 |
|---|---|
| 문장(Statement) | 모든 문장 최소 1번 실행 |
| 분기(Branch) | 모든 조건문의 T/F 최소 1번씩 |
| 조건(Condition) | 개별 조건식의 T/F 각각 1번씩 |
| MC/DC | 각 조건이 독립적으로 결정에 영향 |
| 다중 조건 | 모든 조건 조합 테스트 |
⏱️
7. OS & 스케줄링📊 CPU 스케줄링 2회
| 알고리즘 | 방식 | 특징 |
|---|---|---|
| FCFS | 비선점 | 먼저 도착 순 |
| SJF | 비선점 | 실행 짧은 것 우선 |
| SRT | 선점 | SJF 선점 버전 |
| RR | 선점 | Time Quantum 순환 |
// RR 평균 대기시간 (2회) // 간트 차트 그려서 풀기! // 대기시간 = 완료시간 - 도착시간 - 실행시간 // 평균 = 각 대기시간의 합 / 프로세스 수
🐧 리눅스 명령어 3회
| 명령어 | 기능 |
|---|---|
| pwd | 현재 디렉터리 출력 |
| ls | 목록 표시 |
| cd | 디렉터리 이동 |
| cp | 파일 복사 |
| mv | 이동/이름변경 |
| chmod | 권한 변경 |
| grep | 패턴 검색 |
📊
8. UML & 기타📦 UML 다이어그램 3회
구조 다이어그램
| 다이어그램 | 설명 |
|---|---|
| 패키지 ★ | 폴더 단위, import/access/merge 관계 |
| 클래스 | 클래스 간 관계 |
| 컴포넌트 | 물리적 구성 요소 |
| 배치 | HW 노드와 SW 배치 |
행위 다이어그램
| 다이어그램 | 설명 |
|---|---|
| 유스케이스 | 사용자-시스템 상호작용 |
| 시퀀스 | 메시지 교환 순서 |
| 상태 | 상태 변화 |
| 활동 | 워크플로 |
🎯
최종 정리: 반드시 나오는 TOP 10| # | 주제 | 중요도 | 대비 전략 |
|---|---|---|---|
| 1 | C언어 포인터+구조체 | ⭐⭐⭐⭐⭐ | 메모리 그림 그리며 연습 |
| 2 | Java 상속/오버라이딩 | ⭐⭐⭐⭐⭐ | 생성자 호출 순서 완벽 이해 |
| 3 | SQL 조인 & 집계함수 | ⭐⭐⭐⭐⭐ | NULL 처리 주의 |
| 4 | 서브넷 마스크 계산 | ⭐⭐⭐⭐ | AND 연산 & 호스트 수 |
| 5 | 테스트 커버리지 | ⭐⭐⭐⭐ | 문장/분기/조건 차이 |
| 6 | 보안 공격 & 프로토콜 | ⭐⭐⭐⭐ | 이름+키워드 매칭 |
| 7 | 디자인 패턴 | ⭐⭐⭐ | 생성/구조/행위 + 키워드 |
| 8 | 연결리스트/큐/스택 | ⭐⭐⭐⭐ | 코드 직접 트레이싱 |
| 9 | Python 자료구조 | ⭐⭐⭐ | 리스트/딕셔너리/집합 |
| 10 | DB 릴레이션 용어 | ⭐⭐⭐⭐ | Degree/Cardinality 구분 |
'자격증 > 정보처리기사' 카테고리의 다른 글
| [정보처리기사 필기 요약] #2-1. 애플리케이션 테스트 (0) | 2026.05.07 |
|---|---|
| [정보처리기사 필기 요약] #1-4. 객체지향 분석 방법론 (0) | 2026.05.07 |
| [정보처리기사 필기 요약] #1-2. 미들웨어 개념과 종류 (0) | 2026.05.07 |
| [정보처리기사 필기 요약] #1-1. UML (0) | 2026.05.06 |
| [정보처리기사] 2024년 1,2,3회 실기기출분석 & 개념정리 (0) | 2026.04.17 |