icon

안동민 개발노트

1장 : 학습 전략과 이산수학·논리회로

컴퓨터공학 전체 지도

학습 전략과 이산수학·논리회로 학습 절입니다.

이번 절의 목표는 다음과 같습니다.

8과목이 각각 분리된 내용이 아니라, 하나의 컴퓨터가 움직이는 과정을 나눠서 배운다는 점을 이해합니다.

학습해야 하는 과목은 다음 8개입니다.

과목한 줄 요약
이산수학컴퓨터가 쓰는 수학적 언어
논리회로0과 1로 판단하는 회로
컴퓨터구조CPU, 메모리, 명령어의 구조
운영체제컴퓨터 자원을 관리하는 관리자
C프로그래밍컴퓨터에게 명령하는 기본 언어
자료구조데이터를 효율적으로 정리하는 방법
객체지향프로그래밍프로그램을 객체 단위로 설계하는 방법
웹프로그래밍웹페이지와 웹 동작을 만드는 방법

이 8과목은 제공된 출제범위 기준으로 보면, 컴퓨터구조는 CPU·명령어·기억장치·입출력까지 다루고, C프로그래밍은 자료형·연산자·제어문·함수·배열·포인터·구조체까지 다룹니다. 운영체제는 프로세스·스레드·스케줄링·동기화·교착상태·메모리·파일관리를 다루고, 자료구조는 배열·스택·큐·연결리스트·트리·그래프·정렬·해싱을 다룹니다.


컴퓨터공학은 무엇을 배우는 과목인가?

컴퓨터공학은 단순히 “코딩하는 법”만 배우는 것이 아닙니다.

정확히 말하면 컴퓨터공학은 이러한 내용을 배우는 분야입니다.

데이터를 어떻게 표현하고, 저장하고, 계산하고, 실행하고, 관리하고, 보여줄 것인가?

이 문장을 쪼개면 8과목이 나옵니다.

질문연결 과목
데이터를 숫자로 어떻게 표현할까요?이산수학, 컴퓨터구조
0과 1로 어떻게 판단할까요?논리회로, 이산수학
CPU는 명령을 어떻게 실행할까요?컴퓨터구조
여러 프로그램은 어떻게 동시에 실행될까요?운영체제
컴퓨터에게 명령은 어떻게 작성할까요?C프로그래밍
데이터를 어떻게 정리해야 효율적일까요?자료구조
큰 프로그램은 어떻게 설계할까요?객체지향프로그래밍
사용자가 보는 웹 화면은 어떻게 만들까요?웹프로그래밍

즉, 8과목은 각각 다른 섬이 아닙니다. 하나의 컴퓨터를 보는 8개의 창문입니다.


컴퓨터가 일하는 전체 흐름

컴퓨터가 하는 일은 크게 5단계입니다.

입력 → 저장 → 처리 → 출력 → 관리

예를 들어 사용자가 웹사이트에서 로그인한다고 가정해 보겠습니다.

아이디와 비밀번호 입력
→ 메모리에 저장
→ CPU가 비교하고 계산
→ 결과를 화면에 출력
→ 운영체제가 이 과정을 관리

이것을 과목으로 연결하면 이렇게 됩니다.

컴퓨터의 동작관련 과목
아이디와 비밀번호를 입력합니다웹프로그래밍
입력값이 변수에 저장됩니다C프로그래밍, JavaScript
데이터가 메모리에 저장됩니다컴퓨터구조, 운영체제
CPU가 명령어를 실행합니다컴퓨터구조
프로그램 실행을 운영체제가 관리합니다운영체제
데이터를 빠르게 찾기 위해 구조를 씁니다자료구조
로그인 기능을 객체로 설계합니다객체지향프로그래밍
참/거짓 판단을 합니다이산수학, 논리회로

따라서 로그인 하나에도 8과목이 거의 다 들어갑니다.


가장 밑바닥: 0과 1

컴퓨터는 결국 전기 기계입니다.

전기가 흐르면 1, 전기가 안 흐르면 0이라고 생각할 수 있습니다.

그래서 컴퓨터는 모든 것을 0과 1로 표현합니다.

현실 세계컴퓨터 내부
숫자 70111
문자 A01000001
1
거짓0
이미지수많은 숫자 데이터
음악수많은 숫자 데이터

여기서 나오는 과목이 이산수학논리회로입니다.

이산수학 범위에는 진법변환, 이진법 연산, 논리와 명제, 부울대수, 그래프, 트리 등이 포함되어 있습니다. 논리회로 범위에는 디지털 시스템, 데이터 표현, 부울대수, 논리게이트, 조합논리회로, 순서논리회로, RAM, ROM, PLD가 포함되어 있습니다.

핵심 정리

개념
비트0 또는 1 하나
바이트8비트
2진수0과 1만 쓰는 수
논리참과 거짓을 다루는 규칙
부울대수0과 1로 계산하는 수학
논리게이트AND, OR, NOT 같은 기본 회로

그다음: 회로가 계산을 합니다

컴퓨터가 0과 1을 쓴다고 해서 자동으로 계산이 되는 것은 아닙니다.

0과 1을 가지고 판단하는 장치가 필요합니다. 그게 논리게이트입니다.

대표 논리게이트는 세 개부터 잡으면 됩니다.

게이트의미예시
AND둘 다 1이면 1A도 맞고 B도 맞아야 함
OR하나라도 1이면 1A 또는 B 중 하나만 맞아도 됨
NOT반대로 바꿈1은 0, 0은 1

예를 들어 이런 조건이 있다고 가정하겠습니다.

“비밀번호가 맞고, 아이디도 맞으면 로그인 성공”

이것은 논리식으로 보면 이렇게 됩니다.

아이디 맞음 AND 비밀번호 맞음 = 로그인 성공

이것이 바로 논리회로와 이산수학이 실제 컴퓨터 동작으로 연결되는 방식입니다.


CPU는 명령어를 실행합니다

이제 0과 1도 있고, 회로도 있습니다. 그러면 컴퓨터의 중심은 무엇일까요?

바로 CPU입니다.

CPU는 컴퓨터의 핵심 처리 장치입니다. 정확히 말하면 CPU는 명령어를 가져오고, 해석하고, 실행하는 장치입니다.

CPU 안에는 대표적으로 이런 구성요소가 있습니다.

구성요소역할
제어장치명령어를 해석하고 지시함
산술논리장치, ALU계산과 논리연산을 함
레지스터CPU 안의 아주 빠른 임시 저장소
내부버스CPU 내부에서 데이터가 이동하는 길

컴퓨터구조 범위에도 중앙처리장치 구성요소로 산술논리장치, 레지스터, 제어장치, 내부버스가 들어 있습니다.

CPU의 기본 흐름은 이 항목을 먼저 암기합니다.

명령어 인출 → 명령어 해석 → 명령어 실행
쉽게 말하면
가져옵니다 → 무슨 뜻인지 봅니다 → 실행합니다

예를 들어 C언어에서 이런 코드가 있다고 가정하겠습니다.

a = b + c;

컴퓨터 내부에서는 대략 이런 일이 일어납니다.

b 값을 메모리에서 가져옵니다
c 값을 메모리에서 가져옵니다
CPU가 더합니다
결과를 a에 저장합니다

이것이 컴퓨터구조입니다.


메모리는 데이터를 저장합니다

CPU가 연산을 수행하더라도, 데이터를 저장할 공간이 없으면 처리를 계속할 수 없습니다.

그래서 기억장치가 필요합니다.

대표 기억장치는 이렇게 나뉩니다.

기억장치특징
레지스터CPU 안, 매우 빠름, 용량 작음
캐시CPU 가까이 있음, 빠름
주기억장치, RAM실행 중인 프로그램 저장
보조기억장치, SSD/HDD파일을 오래 저장

시험에서 자주 나오는 순서는 다음과 같습니다.

CPU에 가까운 순서:
레지스터 → 캐시 → 주기억장치 → 보조기억장치

제공된 자료의 컴퓨터구조 예시문제에서도 기억장치 계층구조를 CPU에 가까운 쪽부터 나열하는 문제가 나옵니다. 정답 흐름은 캐시 기억장치 → 주 기억장치 → 보조 기억장치입니다.

핵심 포인트

빠를수록 비싸고 작습니다. 느릴수록 싸고 큽니다.

빠르기용량
빠름작음
느림

이것은 꼭 기억해 둡니다.


운영체제는 관리자입니다

컴퓨터에는 CPU도 있고, 메모리도 있고, 디스크도 있습니다.

그런데 여러 프로그램이 동시에 실행되면 문제가 생깁니다.

예를 들어
크롬도 CPU 쓰고 싶습니다.
카카오톡도 CPU 쓰고 싶습니다.
게임도 CPU 쓰고 싶습니다.
음악 앱도 CPU 쓰고 싶습니다.

이때 어떤 기준으로 순서를 정할까요?

바로 운영체제입니다.

운영체제는 컴퓨터 자원을 관리합니다.

운영체제가 관리하는 것설명
CPU어떤 프로그램을 먼저 실행할지 결정
메모리어느 프로그램에 얼마만큼 줄지 결정
파일저장, 삭제, 읽기, 쓰기 관리
장치키보드, 마우스, 프린터, 디스크 관리
프로세스실행 중인 프로그램 관리

운영체제 범위에는 프로세스, 스레드, 스케줄링, 세마포어, 교착상태, 주기억장치 관리, 가상기억장치 관리, 장치관리, 파일관리, UNIX/Linux가 들어 있습니다.

운영체제에서 가장 먼저 잡아야 할 개념은 프로세스입니다.

프로세스 = 실행 중인 프로그램

프로그램과 프로세스는 다릅니다.

개념
프로그램저장되어 있는 실행 파일
프로세스실제로 실행 중인 프로그램

예를 들어 바탕화면에 있는 크롬 아이콘은 프로그램입니다. 그 아이콘을 더블클릭해서 실행하면 프로세스가 됩니다.


프로그래밍은 컴퓨터에게 명령하는 법입니다

이제 컴퓨터 내부 구조를 알았으니, 우리가 컴퓨터에게 일을 시켜야 합니다.

그 도구가 프로그래밍 언어입니다.

우리는 그중에서 C를 배웁니다.

C언어는 컴퓨터 구조와 가까운 언어라서, 메모리와 주소를 이해하는 데 중요합니다.

C프로그래밍 범위에는 C프로그램의 구성, 자료형과 변수, 선행처리기, 입출력함수, 연산자, 제어문, 함수, 배열, 포인터, 구조체, 파일처리가 포함되어 있습니다.

C언어의 기본 흐름은 다음과 같습니다.

#include <stdio.h>

int main(void) {
    printf("Hello");
    return 0;
}

지금은 코드 세부 문법을 다 외울 필요 없습니다. 이번 절에서는 구조만 보면 됩니다.

코드의미
#include <stdio.h>입출력 기능을 쓰기 위한 준비
int main(void)프로그램 시작점
{ }실행할 명령 묶음
printf()화면에 출력
return 0;프로그램 정상 종료

시험에서는 C 코드 실행 결과를 묻는 문제가 자주 나옵니다. 예를 들어 자료에는 매크로, 형변환, 배열 반복문 관련 문제가 나옵니다.


자료구조는 데이터를 정리하는 방법입니다

프로그래밍을 하면 데이터가 생깁니다.

학생 이름, 점수, 로그인 기록, 게시글, 댓글, 파일 목록 등등.

문제는 데이터를 체계 없이 저장하면 처리 효율이 낮아질 수 있다는 점입니다.

그래서 자료구조를 배웁니다.

자료구조 = 데이터를 효율적으로 저장하고 꺼내는 방법

대표 자료구조는 다음과 같습니다.

자료구조핵심 원리
배열같은 종류 데이터를 번호순으로 저장
스택나중에 넣은 것이 먼저 나옴
먼저 넣은 것이 먼저 나옴
연결리스트노드들이 줄줄이 연결됨
트리부모-자식 구조
그래프정점과 간선으로 연결 관계 표현
해싱키를 이용해 빠르게 찾음

자료구조 범위에는 알고리즘, 배열, 스택과 큐, 연결 리스트, 트리, 그래프, 탐색과 정렬, 해싱이 들어 있습니다.

여기서 중요한 것은 “왜 쓰는가?”입니다.

예를 들어 편의점 줄을 생각해 보겠습니다.

먼저 온 사람이 먼저 계산합니다. 이것은 입니다.

먼저 들어온 사람 → 먼저 나감

이 구조를 FIFO라고 합니다.

FIFO = First In First Out

반대로 접시를 쌓으면 마지막에 올린 접시를 먼저 꺼냅니다. 이것은 스택입니다.

나중에 들어온 것 → 먼저 나감

이 구조를 LIFO라고 합니다.

LIFO = Last In First Out

객체지향은 큰 프로그램을 설계하는 방법입니다

C언어는 절차지향에 가깝습니다.

절차지향은 보통 이런 식으로 생각합니다.

1번 일을 하고
2번 일을 하고
3번 일을 합니다

반면 객체지향은 세상을 객체로 나눠서 생각합니다.

예를 들어 게임을 만든다고 가정하겠습니다.

플레이어
몬스터
아이템
무기
지도

이런 것들을 각각 객체로 봅니다.

객체지향의 기본 개념은 다음입니다.

개념
클래스객체를 만들기 위한 설계도
객체설계도로 만든 실제 대상
메소드객체가 할 수 있는 동작
캡슐화데이터와 기능을 하나로 묶음
상속기존 클래스의 기능을 물려받음
다형성같은 이름의 동작이 다르게 실행됨

객체지향프로그래밍 범위에는 클래스, 객체, 메시지와 메소드, 캡슐화, 상속, 다형성, 생성자, 접근제한자, 오버로딩, 오버라이딩, 인터페이스, 예외처리가 포함되어 있습니다.

중요한 차이는 다음과 같습니다.

절차지향객체지향
순서 중심객체 중심
함수 중심클래스와 객체 중심
작은 프로그램에 단순큰 프로그램 설계에 유리

객체지향은 나중에 6장 1절에서 본격적으로 합니다.


웹프로그래밍은 사용자에게 보여주는 부분입니다

마지막으로 웹프로그래밍입니다.

우리가 보는 웹사이트는 보통 세 가지로 구성됩니다.

요소역할
HTML내용과 구조
CSS디자인
JavaScript동작

예를 들어 버튼 하나를 만든다고 가정하겠습니다.

<button>로그인</button>

이것은 HTML입니다. 버튼을 화면에 만듭니다.

button {
    color: red;
}

이것은 CSS입니다. 버튼 글자 색을 바꿉니다.

alert("로그인 시도");

이것은 JavaScript입니다. 동작을 만듭니다.

웹프로그래밍 범위에는 웹 클라이언트, 웹 서버, HTTP 요청과 응답, HTML, CSS, JavaScript, BOM, DOM, 이벤트, 예외처리가 포함되어 있습니다.

웹의 기본 구조는 이것만 기억해 둡니다.

클라이언트 → 요청 → 서버
클라이언트 ← 응답 ← 서버
예를 들어 사용자가 네이버에 접속하면
내 브라우저가 서버에게 페이지를 요청합니다.
서버가 HTML, CSS, JavaScript를 보내줍니다.
브라우저가 화면에 보여줍니다.

8과목을 하나로 연결하면?

이제 전체 그림을 하나로 합쳐 보겠습니다.

이산수학

논리회로

컴퓨터구조

운영체제

C프로그래밍

자료구조

객체지향프로그래밍

웹프로그래밍

하지만 실제로는 이렇게 완전한 일직선은 아닙니다. 서로 계속 연결됩니다.

예시: 계산기 프로그램 만들기

계산기 프로그램 하나를 만든다고 가정하겠습니다.

필요한 것관련 과목
숫자를 2진수로 표현이산수학
덧셈 회로가 계산논리회로
CPU가 명령어 실행컴퓨터구조
운영체제가 프로그램 실행 관리운영체제
계산 코드를 작성C프로그래밍
입력된 숫자들을 저장자료구조
계산기 객체를 설계객체지향
웹 계산기 화면 제작웹프로그래밍

이제 전체 구조가 보일 것입니다.

8과목은 이렇게 연결됩니다.

수학적 원리 → 전자 회로 → 컴퓨터 하드웨어 → 운영체제 → 프로그래밍 → 데이터 관리 → 프로그램 설계 → 웹 응용

시험에서 중요한 관점

시험은 보통 세 가지 방식으로 나옵니다.

용어를 아는지 묻습니다

예: CPU의 구성요소가 아닌 것은?

이런 문제는 용어 암기가 필요합니다.

CPU 구성요소
제어장치, ALU, 레지스터, 내부버스

차이를 구분할 수 있는지 묻습니다

예: 스택과 큐의 차이는?

스택은 LIFO, 큐는 FIFO

직접 계산하거나 실행 결과를 묻습니다

float k = 12.5;
int j;
j = k;
printf("%d", j);

이 코드는 12가 출력됩니다. 왜냐하면 실수 12.5를 정수 변수에 넣으면 소수점 아래가 버려지기 때문입니다. 이 유형은 C프로그래밍 예시문제에도 나옵니다.


이번 절에서 반드시 기억할 10개

1장 1절에서 다 외우려고 하지 마라. 이번 절에서는 이 10개만 확실히 잡으면 됩니다.

번호개념
1비트0 또는 1 하나
22진수컴퓨터가 쓰는 기본 수 표현
3논리게이트0과 1로 판단하는 회로
4CPU명령어를 실행하는 장치
5메모리데이터를 저장하는 장치
6운영체제컴퓨터 자원을 관리하는 프로그램
7프로세스실행 중인 프로그램
8C언어컴퓨터에게 명령하는 프로그래밍 언어
9자료구조데이터를 효율적으로 정리하는 방법
10클라이언트와 서버가 통신하는 구조

핵심 요약

이번 절의 핵심을 한 문장으로 압축하면 다음과 같습니다.

컴퓨터공학 8과목은 “0과 1로 데이터를 표현하고, 회로와 CPU가 처리하고, 운영체제가 관리하고, 프로그래밍으로 명령하고, 자료구조와 객체지향으로 정리하고, 웹으로 사용자에게 보여주는 과정”을 나눠서 배우는 것입니다.
더 짧게 말하면
이산수학 = 컴퓨터의 수학
논리회로 = 컴퓨터의 전기적 판단
컴퓨터구조 = 컴퓨터의 몸
운영체제 = 컴퓨터의 관리자
C프로그래밍 = 컴퓨터에게 명령하는 법
자료구조 = 데이터 정리법
객체지향 = 큰 프로그램 설계법
웹프로그래밍 = 사용자에게 보여주는 법

확인 문제

먼저 정답을 보지 않고 풀어봅니다.

문제 1

컴퓨터가 모든 데이터를 표현하는 가장 기본 단위는?

① 바이트 ② 비트 ③ 파일 ④ 프로그램


문제 2

CPU의 역할로 가장 알맞은 것은?

① 데이터를 오래 보관합니다 ② 명령어를 가져오고 해석하고 실행합니다 ③ 웹페이지의 색깔을 정합니다 ④ 파일 이름만 관리합니다


문제 3

실행 중인 프로그램을 무엇이라고 하는가?

① 파일 ② 프로세스 ③ 클래스 ④ 태그


문제 4

스택의 특징은?

① 먼저 들어온 것이 먼저 나갑니다 ② 나중에 들어온 것이 먼저 나갑니다 ③ 데이터를 무조건 정렬합니다 ④ 웹 서버와 통신합니다


문제 5

HTML, CSS, JavaScript의 역할 연결로 맞는 것은?

① HTML = 디자인, CSS = 동작, JavaScript = 구조 ② HTML = 구조, CSS = 디자인, JavaScript = 동작 ③ HTML = 계산, CSS = 저장, JavaScript = 운영체제 ④ HTML = CPU, CSS = 메모리, JavaScript = 디스크


정답과 해설은 절별 확인문제 정답해설에서 확인합니다.

채점 후 1장 2절: 2진수, 8진수, 16진수, 보수, 음수 표현으로 넘어갑니다.