대학에서 배우는 과목 중 중요한 과목은
컴퓨터 개론, 자료구조, 알고리즘이라고 한다. (3대장?)
그러나 국비학원에선 짧은 시간 내에서 프로그래밍과 함께 배우기 어려우므로 따로 보충을 해야 한다고 한다.
(그래서 나 같은 경우는 udemy나 부스트코스를 통해 보충을 하려고 한다.)
여하튼 오늘 배우는 개론의 목차는 이렇다.
- 컴퓨터 시스템의 특징
- 컴퓨터 시스템의 구성
- 기억장치
- 소프트웨어
- 자료의 표현과 연산
먼저 크기를 나타내는 단위부터 알아보자.
10^3 | K | kilo(킬로) | 10^-3 | m | milli(밀리) |
10^6 | M | mega(메가) | 10^-6 | u | micro(마이크로) |
10^9 | G | giga(기가) | 10^-9 | n | nano(나노) |
10^12 | T | tera(테라) | 10^-12 | P | pico(피코) |
10^15 | P | peta(페타) | 10^-15 | f | femto(펨토) |
- 컴퓨터 시스템의 특징
- 전자계산기(EPDS)의 개요
- 단순한 수치계산뿐만 아니라 수치계산, 자동제어, 자료처리, 사무 관리, 경영, 과학 등 많은 양의 자료를 처리하고 신속한 정보를 제공하는 장치
- EPDS : Electronic Data Processing System (전자 자료 처리 조직체)
- 특징 : 신속성, 정확성, 대용량성, 호환성, 자동성, 범용성
- 창조성은 없으며 한 번에 하나씩 명령을 처리함(위에서 아래로 차례대로)
- 전자계산기(EPDS)의 개요
- 컴퓨터 시스템의 구성
- 컴퓨터 시스템의 구성요소
- 3대 구성요소
- 입력장치 - 중앙처리장치 - 출력장치
- 5대 구성요소
- 입력장치 - 중앙처리장치(주기억장치, 제어장치, 연산장치) - 출력장치
- 중앙처리장치(CPU)
- 주기억 장치 : 현재 실행 중인 프로그램과 데이터를 기억하는 장치 - 램(RAM), 롬(ROM)
- 연산 장치 : 산술 및 논리 연산을 수행하는 장치 (누산기, 가산기, 보수기, 상태 레지스터, 어드레스 레지스터, 데이터 레지스터, 기억레지스터로 구성)
- 제어 장치 : 각 장치에 필요한 동작을 지시, 제어 작업을 담당하는 장치로, 프로그램 카운터 명령어 레지스터, MAR, MBR, 인터럽트, 명령어해독기, 부호기로 구성
- 3대 구성요소
- 컴퓨터 시스템의 구성요소
- 기억장치
- 기억장치의 역할
- 프로그램과 데이터를 보관하고 있다가 필요할 때 꺼내어 사용할 수 있도록 한다.
- write : 주기억장치(main memory or main storage)에 데이터를 기억시키는 것
- read : 주기억장치에 기억된 내용을 꺼내는 것
- 주기억 장치 : 실행될 프로그램과 데이터를 기억한다.
- 보조기억장치(auxiliary storage): 오랫동안 보관해야 할 프로그램과 데이터를 저장하는 역할
- 프로그램은 반드시 주기억장치에 기억되어야만 실행
- 기억장치의 역할
- 소프트웨어
- Software 은 시스템 소프트웨어와 응용 소프트웨어로 나눠져 있다.
- 시스템 소프트웨어는 제어 프로그램과 처리 프로그램으로 나뉘어 있다.
- 제어 프로그램은 감시, 작업관리, 데이터 관리 프로그램으로 나뉘고
- 처리 프로그램은 언어번역, 서비스, 문제처리 프로그램으로 나뉘어 있다.
- 운영체제(OS : Operating System)
- 컴퓨터 시스템에 관련된 모든 자원을 관리, 제어하여 효율성을 최대로 높여주는 프로그램의 집합체
- 운영체제의 목적 : 이용가능도 향상, 응답시간 단축, 신뢰도 향상, 처리능력 향상
- 프로그래밍 언어
- 기계어(기계중심언어) : 0과 1의 조합으로만 이루어진 언어
- 어셈블리어(기계중심언어) : 기계어를 기호와 1대 1로 대응시켜 기호화한 언어
- 컴파일러 언어
- FORTRAN : 과학 기술 계산용으로 개발된 언어
- COBOL : 사무처리용으로 개발된 언어
- ALGOL : 블록구조 프로그램의 효시로 PASCAL과 C언어의 모체임
- PL/1 : 포트란, 코볼, 알골 등의 장점을 합한 언어
- C : 유닉스 운영체제 하에서 사용되는 시스템 프로그램 작성에 적합한 언어
- JAVA : 웹 및 응용프로그램 작성에 많이 사용되는 언어
- RPG : 각종보고서를 쉽게 작성하는 언어
- 인터프리터 언어
- BASIC : 배우기 쉽고 간편한 대화형 언어, 교육용 언어
- JAVASCRIPT : 웹페이지(html, css)의 동작 및 액션을 제어하는 데 사용하는 언어
- LISP : 프로그램이 자료처럼 사용되는 인공지능이나 전자회로에서 사용되는 언어
- PROLOG : 제5세대 언어로 각광받는 인공지능용 언어
- 언어번역 프로그램
- 어셈블러 : 어셈블리어를 기계어로 번역
- 컴파일러 : 고급언어를 기계어로 번역(C, C++, C#, Java)
- 인터프리터 : 베이직 언어와 같이 한 줄씩 기계어로 번역
목적프로그램을 생산하지 않고 번역즉시 실행됨(BASIC, Python, Ruby, Perl, PHP, Javascript)
- 프로그램의 생성과정의 용어
- 원시 프로그램(Source Program) : 사용자가 프로그래밍 언어를 이용해 작성한 프로그램
- 목적 프로그램(Object Program) : 원시 프로그램을 언어 번역 프로그램을 이용해 기계어로 번역한 프로그램
- 실행 프로그램(Active Program) : 로드(Load)되어 실행 가능한 상태에 있는 프로그램
- 링커 프로그램(Linker Program) : 실행 가능한 프로그램을 만들기 위해 목적프로그램을 서로 연결시키는 프로그램
- 디버깅(Debugging) : 사용자 프로그램이나 시스템 프로그램 등의 소프트웨어 및 하드웨어에서 존재하는 오류를 검출하여 수정하는 것
- 로더(Loader) : 디스크나 테이프에 저장된 목적 프로그램을 읽어서 주기억 장치에 올린 다음 실행시키는 프로그램
- 할당 : 프로그램의 실행을 위해서 메모리 내에 기억공간을 확보하는 작업
- 자료의 표현과 연산
- 수의 체계
- 10진수, 2진수, 8진수, 16진수 (컴퓨터가 숫자를 세는 방법이 이렇게 4가지)
- 10진수를 각각 다른 진수로 바꾸는 방법이나 다른 진수를 10진수로 바꾸는 방법은 고등학교 수학 시간에 했을 것이라 생각하고 생략
- 2진수를 8진수로 바꾸는 방법은 간단하다.
101101110011(2)을 3개씩 묶는다. 101/101/110/011 이렇게 묶은 수를 각각 8진수로 바꿔주면
101>5, 110>6, 011>3이 된다. 즉 5563(8)으로 간단히 바꿀 수 있다.
반대로 바꾸는 것 역시 5, 5, 6, 3을 각 각 2진법으로 바꿔주면 된다. - 2진수를 16진수로 바꾸는 방법은 위와 거의 동일하다.
다만 8진수로 바꿀 땐 3자리씩 묶었다면 이젠 4자리씩 묶어서 계산해주면 된다. - 8진수를 16진수로 바꾸는 방법은 따로 방법이 없다. 따라서 10진수로 바꾼 다음에 다시 계산하거나 2진수로 바꾼 다음에 다시 계산하는 방법밖에 없다. 보통 개발자들은 2진수를 이용해 변환해 준다.
- 정보의 표현 단위
- Bit : 정보의 최소 단위, 2진수 0 또는 1에 대응되는 한 단위
- Byte : 한 문자를 표현하기 위한 기본 단위(8bit), 자료의 최소 단위
- Word : CPU가 한 번에 처리하는 정보의 단위 (지금은 32bit > 즉 4Byte가 기준, 앞으로 더 늘어날 수도 있음)
- Field(Item) : 하나의 단위로 취급되는 문자 및 단어들의 집합
- Record : 하나 이상의 항목들로 구성된 정보 표현의 기본 단위
- File : 여러 레코드들의 모임 단위, 프로그램을 구성하는 기본단위
- Database : 논리적으로 연관된 레코드나 파일의 모임
- 정보의 크기단위
- 2^10 → 1024 Byte → 1KB
- 2^20 → 1024*1024 Byte → 1024KB
- 2^30 → 1024*1024*1024 Byte → 1024MB
- 2^40 → 1024*1024*1024*1024 → 1024GB
- 2^50 → 1024*1024*1024*1024*1024 → 1024TB
- Date Code
- BCD코드 : 6비트(2개의 Zone bit와 4개의 digit bit)
- 2^6(64) 문자 표현, 2진화 10진 코드
- EBCDIC 코드 : 8비트(4개의 존 비트와 4개의 digit)
- 2^8(256) 문자 표현, 확장 2진화 10진 코드
- ASCII 코드 : 7비트(3개의 존 비트와 4개의 digit)
- 2^7(128) 문자 표현, 1bit(패리티비트) 추가하면 8비트로 사용, 데이터통신용으로 이용
- 유니코드 : 2바이트(16비트) - ASCII 코드 포함
- 2^16(65,536) 문자 표현, 전 세계 모든 문자표시
- BCD코드 : 6비트(2개의 Zone bit와 4개의 digit bit)
- 수의 체계
- 새로 안 사실
- CPU와 하드디스크(보조 기억 장치)는 연결 x (그래서 보조 기억 장치에 저장하라는 코드가 따로 있다.)
- RAM은 휘발성 메모리, 전원 끌 때까지 데이터를 저장하는 것이 아닌, 그 프로그램을 끌 때까지 저장한다.
- 64bit, 32bit는 CPU와 RAM을 연결하는 전선의 개수?를 나타내는 것이며, 당연히 많으면 많을수록 한 번에 보낼 수 있는 데이터양이 많다.
- 프로그램 책에 나와있는 메모리는 전부 RAM을 말하며, 보조 기억 장치는 따로 정확한 명칭으로 쓰여있다.
- 누산기는 계산 결과의 중간중간 값을 저장하는 장치이다. 예를 들어 6+5+2 라면 먼저 6+5를 계산하여 11이라는 결과가 나올 텐데 누산기는 여기서 11을 저장하고 그 후 +2를 하는 것이다.
- 보수기는 컴퓨터 연산 장치 중 뺄셈이 없어서 필요한 장치이다. 보수 즉, 초등학교 때 배운 보색의 개념처럼 수에도 반대가 되는 개념이 있는데 이를 이용해 덧셈하여 뺄셈을 계산하는 것이다. (신기해)
- 컴퓨터는 0과 1을 이해하는 것이 아니다. 사실 전기가 들어오고 안 오고 즉 5v, 0v를 인식하는 것이었으나, 이것이 on, off로 작성되는 과정을 거쳐 더 간소화되어 1과 0으로 표시되는 것이다.
- c언어는 computer language 해서 c언어인 줄 알았는데, 알고 보니 그 앞에 a언어, b언어가 있었고 b언어를 모체로 해서 만들어서 c언어로 명명했다고 한다.
- c언어는 플랫폼에 종속적이며, java는 플랫폼에 독립적이다.