Ch6. 정보처리기사 — 프로그래밍 언어와 최종 모의고사
프로그래밍 언어 개요
정보처리기사 시험에서 프로그래밍 언어 문제는 코드를 실행했을 때의 출력 결과를 묻는 형식이 주를 이룹니다. 코드를 직접 짜는 것이 아니라 읽고 이해하는 능력이 핵심입니다.
출제 언어: C, Java, Python — 세 언어 모두 출제됩니다.
C 언어 핵심
포인터와 메모리
int a = 10;
int *p = &a; // p는 a의 주소를 저장
printf("%d", *p); // 출력: 10 (역참조)
printf("%p", p); // 출력: a의 주소값
포인터 연산:
int arr[] = {10, 20, 30};
int *p = arr;
printf("%d", *(p + 1)); // 출력: 20
printf("%d", *(p + 2)); // 출력: 30
구조체(struct)
struct Student {
char name[20];
int age;
float gpa;
};
struct Student s1 = {"홍길동", 20, 3.8};
printf("%s %d", s1.name, s1.age); // 홍길동 20
파일 I/O
FILE *fp = fopen("data.txt", "r"); // 읽기 모드 오픈
char line[100];
while (fgets(line, 100, fp) != NULL) {
printf("%s", line);
}
fclose(fp);
자주 출제되는 C 코드 패턴
// 재귀 함수 — 팩토리얼
int factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
// factorial(5) = 120
// 배열 정렬(버블 정렬)
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
Java 핵심
OOP 4대 원칙
| 원칙 | 설명 | 핵심 키워드 |
|---|---|---|
| 캡슐화 | 데이터와 메서드를 하나로 묶고 은닉 | private, getter/setter |
| 상속 | 부모 클래스의 속성을 자식이 물려받음 | extends, super |
| 다형성 | 같은 메서드가 다르게 동작 | 오버로딩, 오버라이딩 |
| 추상화 | 핵심 특징만 모델링 | abstract, interface |
상속과 오버라이딩
class Animal {
void sound() { System.out.println("..."); }
}
class Dog extends Animal {
@Override
void sound() { System.out.println("멍멍"); }
}
Animal a = new Dog();
a.sound(); // 출력: 멍멍 (동적 다형성)
인터페이스 vs 추상클래스
| 구분 | 인터페이스 | 추상클래스 |
|---|---|---|
| 다중 구현 | 가능 (implements) | 불가 (extends 1개) |
| 필드 | 상수만 | 일반 변수 가능 |
| 메서드 | 추상 메서드 (default 제외) | 구현 메서드 포함 가능 |
예외 처리
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다: " + e.getMessage());
} finally {
System.out.println("항상 실행");
}
Python 핵심
자료구조
# 리스트 — 변경 가능, 순서 있음
lst = [1, 2, 3]
lst.append(4) # [1, 2, 3, 4]
lst.pop() # [1, 2, 3]
# 딕셔너리 — 키-값 쌍
d = {'name': '홍길동', 'age': 20}
d['email'] = 'a@b.com' # 추가
# 튜플 — 변경 불가, 순서 있음
t = (1, 2, 3)
# 집합 — 중복 없음, 순서 없음
s = {1, 2, 3, 3} # {1, 2, 3}
클래스와 상속
class Animal:
def __init__(self, name):
self.name = name
def sound(self):
return "..."
class Dog(Animal):
def sound(self):
return f"{self.name}: 멍멍"
d = Dog("바둑이")
print(d.sound()) # 바둑이: 멍멍
람다와 고차함수
# 람다
square = lambda x: x ** 2
print(square(5)) # 25
# map, filter
nums = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, nums)) # [1, 4, 9, 16, 25]
evens = list(filter(lambda x: x % 2 == 0, nums)) # [2, 4]
자료구조와 알고리즘
자료구조 비교
| 자료구조 | 삽입 | 삭제 | 검색 | 특징 |
|---|---|---|---|---|
| 배열 | O(n) | O(n) | O(1) | 인덱스 접근 빠름 |
| 연결 리스트 | O(1) | O(1) | O(n) | 동적 크기 |
| 스택 | O(1) | O(1) | O(n) | LIFO — 후입선출 |
| 큐 | O(1) | O(1) | O(n) | FIFO — 선입선출 |
| 이진 탐색 트리 | O(log n) | O(log n) | O(log n) | 정렬된 트리 |
| 해시 테이블 | O(1) | O(1) | O(1) | 키-값 저장 |
정렬 알고리즘 비교
| 알고리즘 | 최선 | 평균 | 최악 | 안정성 |
|---|---|---|---|---|
| 버블 정렬 | O(n) | O(n²) | O(n²) | 안정 |
| 선택 정렬 | O(n²) | O(n²) | O(n²) | 불안정 |
| 삽입 정렬 | O(n) | O(n²) | O(n²) | 안정 |
| 퀵 정렬 | O(n log n) | O(n log n) | O(n²) | 불안정 |
| 합병 정렬 | O(n log n) | O(n log n) | O(n log n) | 안정 |
| 힙 정렬 | O(n log n) | O(n log n) | O(n log n) | 불안정 |
Big-O 복잡도 순서
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2^n) < O(n!)
최종 모의고사 20문항
1. C언어에서 *p의 의미는?
- ① p의 주소를 나타낸다
- ② p가 가리키는 주소의 값을 나타낸다
- ③ p에 저장된 정수값이다
- ④ 포인터 선언이다
정답: ②
2. Java에서 다중 상속이 불가능한 이유와 이를 보완하는 키워드는?
- ① 다중 상속 가능, static
- ② 다이아몬드 문제 때문, interface
- ③ JVM 제한, abstract
- ④ 컴파일러 제한, extends
정답: ②
3. 다음 Python 코드의 출력 결과는?
x = [1, 2, 3]
y = x
y.append(4)
print(x)
- ① [1, 2, 3]
- ② [1, 2, 3, 4]
- ③ [4]
- ④ 오류 발생
정답: ② (y = x는 참조 복사)
4. 스택(Stack)의 특징을 옳게 설명한 것은?
- ① FIFO 구조로 먼저 들어온 데이터가 먼저 나간다
- ② LIFO 구조로 나중에 들어온 데이터가 먼저 나간다
- ③ 양쪽 끝에서 삽입·삭제가 가능하다
- ④ 인덱스로 임의 접근이 가능하다
정답: ②
5. 퀵 정렬의 평균 시간 복잡도는?
- ① O(n)
- ② O(n log n)
- ③ O(n²)
- ④ O(log n)
정답: ②
6. 다음 C 코드의 출력 결과는?
int a = 5, b = 3;
printf("%d", a % b + a / b);
- ① 1
- ② 2
- ③ 3
- ④ 4
정답: ③ (5%3=2, 5/3=1, 2+1=3)
7. Java에서 @Override 애노테이션의 의미는?
- ① 새 메서드를 정의한다
- ② 부모 클래스의 메서드를 재정의함을 명시한다
- ③ 인터페이스 구현을 선언한다
- ④ 예외를 무시한다
정답: ②
8. 이진 탐색(Binary Search)이 동작하기 위한 전제조건은?
- ① 데이터가 연결 리스트에 저장되어 있어야 한다
- ② 데이터가 정렬되어 있어야 한다
- ③ 데이터 크기가 짝수여야 한다
- ④ 모든 데이터가 숫자여야 한다
정답: ②
9. Python에서 딕셔너리(dict)의 키 조건으로 옳은 것은?
- ① 모든 자료형 가능
- ② 변경 불가능한(immutable) 자료형만 가능
- ③ 문자열만 가능
- ④ 정수만 가능
정답: ②
10. 합병 정렬(Merge Sort)의 특징으로 옳지 않은 것은?
- ① 최악의 경우에도 O(n log n)이다
- ② 안정 정렬(Stable Sort)이다
- ③ 추가 메모리가 필요하지 않다
- ④ 분할 정복(Divide and Conquer) 기법을 사용한다
정답: ③ (합병 정렬은 O(n) 추가 메모리 필요)
11. OSI 7계층 중 라우팅을 담당하는 계층은?
- ① 2계층 데이터링크
- ② 3계층 네트워크
- ③ 4계층 전송
- ④ 5계층 세션
정답: ②
12. 교착상태(Deadlock) 발생의 4가지 조건이 아닌 것은?
- ① 상호 배제
- ② 선점 불가
- ③ 점유 및 대기
- ④ 동적 할당
정답: ④ (교착상태 4조건: 상호배제·비선점·점유대기·순환대기)
13. 다음 중 대칭키 암호화 알고리즘은?
- ① RSA
- ② ECC
- ③ AES
- ④ DSA
정답: ③
14. 프로세스 상태 전이 중 “실행 → 대기” 상태로 변하는 원인은?
- ① CPU 시간 초과
- ② I/O 요청 발생
- ③ 높은 우선순위 프로세스 도착
- ④ 생성 완료
정답: ②
15. LRU(Least Recently Used) 페이지 교체 알고리즘의 원칙은?
- ① 가장 오래된 페이지를 교체
- ② 가장 최근에 사용된 페이지를 교체
- ③ 가장 오랫동안 사용되지 않은 페이지를 교체
- ④ 사용 빈도가 가장 낮은 페이지를 교체
정답: ③
16. SQL Injection 공격을 방어하는 가장 효과적인 방법은?
- ① 방화벽 설치
- ② 입력값 검증 및 Prepared Statement 사용
- ③ SSL/TLS 암호화
- ④ 패스워드 복잡도 강화
정답: ②
17. 해시 함수의 특성이 아닌 것은?
- ① 같은 입력은 항상 같은 출력
- ② 출력에서 입력을 역산 가능
- ③ 출력 길이가 고정됨
- ④ 서로 다른 입력이 같은 출력을 가질 수 있음(충돌)
정답: ②
18. 다음 재귀 함수 f(4) 의 반환값은?
int f(int n) {
if (n == 1) return 1;
return n + f(n-1);
}
- ① 4
- ② 8
- ③ 10
- ④ 16
정답: ③ (4+3+2+1=10)
19. 인터프리터(Interpreter) 언어의 특징으로 옳은 것은?
- ① 실행 전 전체를 기계어로 번역한다
- ② 런타임에 한 줄씩 번역·실행한다
- ③ 컴파일러보다 실행 속도가 빠르다
- ④ 링킹(Linking) 과정이 필요하다
정답: ②
20. 소프트웨어 개발 방법론 중 애자일(Agile)의 핵심 특징은?
- ① 요구사항을 초기에 완전히 확정하고 순서대로 개발
- ② 반복적이고 점진적인 개발, 변화에 빠른 대응
- ③ 문서화가 코드보다 중요
- ④ 대형 팀에 최적화된 방법론
정답: ②
정보처리기사 합격 후 로드맵
| 단계 | 목표 | 기간 |
|---|---|---|
| 1단계 | 정보처리기사 취득 | 현재 |
| 2단계 | 개발 언어 심화 (Python/Java/C++) | 6개월 |
| 3단계 | 클라우드(AWS/Azure) 자격증 | 6~12개월 |
| 4단계 | 빅데이터 분석기사 / SQLD | 병행 가능 |
| 5단계 | 프로젝트 포트폴리오 완성 | 취업 직전 |
OIYO 편집부
Content Editor지식 인큐베이터이자 전문 콘텐츠 크리에이터. 경영, 경제, 법률 및 실생활에 유용한 실무/자격증 중심의 깊이 있는 정보를 연구하고 공유합니다.