컴퓨터과학 챕터 6 약 8분

Ch6. 정보처리기사 — 프로그래밍 언어와 최종 모의고사

O
OIYO 편집부 기여자
6/6

프로그래밍 언어 개요

정보처리기사 시험에서 프로그래밍 언어 문제는 코드를 실행했을 때의 출력 결과를 묻는 형식이 주를 이룹니다. 코드를 직접 짜는 것이 아니라 읽고 이해하는 능력이 핵심입니다.

출제 언어: 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단계프로젝트 포트폴리오 완성취업 직전
O

OIYO 편집부

Content Editor

지식 인큐베이터이자 전문 콘텐츠 크리에이터. 경영, 경제, 법률 및 실생활에 유용한 실무/자격증 중심의 깊이 있는 정보를 연구하고 공유합니다.