C언어 겨울 계절을 듣게 되었다
피피티로만 필기하고 정리하면 뭔가 내용도 방대하고 정리가 안되는 기분이라
그냥 더하지도 덜하지도 말고 수업에서만 다룬 내용 처음부터 블로그에 개념 정리하려고함 ..
공부하기싫다 ㅋ ㅠ 그렇지만 잘해봅시다 쫌!!! 잘살아봅시다 쫌!!!
C언어는 필수이고 지금 너가 C언어도 아직 버벅거린다는게 말 안되는것입니다
화이팅화이팅
프로그램이란 ?
컴퓨터 = 하드웨어 + 소프트웨어(프로그램)
프로그램은 컴퓨터를 범용적으로 만들기 위한 것
컴퓨터프로그램은 시간순서에 따라 컴퓨터가 할 일을 시간순서에 따라 컴퓨터 언어(명령어)로 적어놓은것
예를들어, 계산기는 계산의 기능만 수행할 수 있고, 기능을 변경할 수 없으나 컴퓨터는 프로그램이라는 개념을 도입하여 수행하는 기능을 쉽게 변경할 수 있다.
CPU는 컴퓨터의 두뇌로, 연산, 제어, 기억 등의 기능을 한다.
CPU는 입력장치로 입력을 받아 처리한 후, 출력장치로 결과물을 내보낸다.
기억장치는 주기억장치와 보조기억장치로 나누어짐
주기억장치(main memory) : 중앙처리장치(CPU :Central Processor Unit) 와 접근통신이 가능한 기억장치이다.
보조기억장치(auxiliary memory) : 현재는 필요하지 않은 프로그램이나 데이터를 저장하고 있다가 데이터나 프로그램을 요구하는 경우 주기억장치로 데이터를 전달하는 저장장치
주기억장치에는 RAM 등이 있는데, RAM과 CPU는 반도체 소자들이라서 빠르다.
보조기억장치에는 HDD, USB등이 있는데, 하드디스크는 말그대로 물리적인 회전에 의해 전보를 읽으므로 느리다
그래서 반도체인 애들과 데이터를 주고받기엔 느리고 delay 가 생기기 때문에 이러한 속도차이를 완충하기 위해 RAM을 이용한다.
컴퓨터의 전원이 켜지면 부팅이 시작되고 프로그램의 실행은 CPU가 명령어를 실행한다는말임
HDD가 한꺼먼에 RAM에 로딩하고, 그 정보를 CPU에 전송한다. 그렇게되면 램속도와 cpu속도가 비슷하기떄문에 효율적임
사람은 자연어를 다루고 , 자연어는 사람마다 해석이 다르다.
컴퓨터의 단어는 명령어이고, 그 명령어의 배치를 통해 프로그래밍하여 원하는 일을 수행하게 함
컴퓨터는 기계어만 알아들을 수 있는데 기계어는 0과1의 논리값으로 이루어져있다.
즉, 다시말해 정보를 전기적인 상태로 저장하는것인데,
ON : 5V , 1
OFF : 0V , 0 로 나타낸다.
총 128개의 문자를 ASCII code를 이용하여 나타내는데, 128 가짓수의 문자를 0과1의 조합으로 표현하려면
2^7= 128 이므로,
0000000 ~ 1111111(2) 로 128개의 문자를 나타내는것임
여기에 오류를 측정하기 위한 parity bit를 추가해서 총 8비트로 문자를 표현하게 되었고,
8bit=1byte으로 정의하여 정보표현최소단위라고 부르기로 하였음
폰노이만 구조
프로그램은 메인메모리에 저장된다.
메인메모리에 저장된 프로그램에서 명령어들을 순차적으로 가져와서 실행한다.
기계어
기계어는 2진수의 형태로 값을 나타내는 최소단위( bit , binary digit )
정보의 최소단위 : 8bit = 1 byte
문자(영어) -> 숫자값(2진수)
전기값이 저장된다. 컴퓨터내부는 전기적인 상태가 저장되는것임
컴퓨터는 기계어를 바로 이해할 수 있다.
어셈블리어(니모닉)
사람이 읽기 편한 언어
ex ) add mov sub
인간이 기계어를 사용하면 불편함
프로그래밍언어는 자연어와 기계어의 중간이고, 프로그래밍언어를 컴파일러가 기계어로통역한다.
자연어 -> 기계어 ( by 컴파일러 )
여기서 컴파일러와 인터프리터의 차이는
컴파일러는 통변역하고, 인터프리터는 줄단위로 실행한다는점이다.
(저급언어)기계어(machine language)
- CPU의 언어를 이진수로 표현한것이다.
- 특정 CPU에 의존적이다.
기계어는 cpu에서 처리하기 때문에, cpu마다 명령어가 다르다.
컴파일러는 cpu에 맞게 기계어로 변환한다.
어셈블리어
- CPU의 명령어들을 이진수가 아닌 영어의 약자인 기호로 표시한 것
즉 다시말해 기계어의 이진수를 기호로 표시한것이다.
- 특정 CPU에 의존적이다.
- 기계어보다 더 높은 수준에서 프로그램 작성하는게 가능
- 기호와 CPU의 명령어가 일대일로 대응된다
- 어셈블러는 기호를 이진수로 변환하는 프로그램임
고급언어(high level language) : C, Java, C++
- 고수준의 명령을 사용함
- 고급언어는 CPU에 독립적이다.
컴파일러는 고급언어문장을 기계어로 변환하는 프로그램이다.
high level 로 갈수록 자연어이고 low level 로 갈수록 기계어 범주에 속한다.
UNIX <-> LINUX
유닉스는 서버에서 돌아가는 프로그램이고 리눅스는 유닉스의 컴퓨터버전 PC에서 돌아가게 만든 OS이다.
C언어는 간결하고 효율적이다
하드웨어를 직접 제어하는 저수준의 프로그래밍도 가능하고 고수준의 프로그래밍도 가능
이식성이 뛰어남
이식성이란 예를들어 일반 PC에 windows상에서 프로그램을 리눅스공간에서도 돌릴 수 있고, workstation에 들어가는 unix라는 OS에서도 실행시킬 수 있다는것을 의미함 window, linux, unix 는 플랫폼인데 하드웨어에 독립적이라고 말 할 수 있고 이것을 이식성이 뛰어나다고 표현하는것임
저수준 ( Low level )
고수준 ( High level )
이렇게 나누는건 정말 수준에 따라 나누는게 아니라,
사람에게 가까워질수록 고수준(High level language )
컴퓨터가 이해할 수 있는 언어는 low level language 어셈블리어 기계어
대부분의 언어는 사람이 이해할 수 있는 자연어에 가까운 high level language
C언어의 다른 언어와 비교해서 제일 큰 차이는 하드웨어제어가 가능하다는점이다. 따라서 C는 펌웨어에 많이 사용된다.
C라는 언어 자체가 파생되어서 여러 다른 언어가 탄생했음
C언어의 파생어 대표적으로 java 파이썬 비쥬얼베이직 등이 있음
또한, C언어는 임베디드( 내장형 시스템 )
쉽게 말해 휴대용 전자장비 프로그램(소프트웨어)를 실행시킬 수 있는 형태의 휴대용 전자장비를 임베디드시스템이라고 말 함
임베디드시스템은 CPU를 사용하지않고, CPU 대신에 micro controller를 사용했었음
M-cotroller는 연산, 제어, 기억의 기능을 가지고 있음
얘네는 직접적으로 마이크로컨트롤러가 주변을 제어할 수 있음
CPU는 항상 interface카드를 거쳐서 다른 장비를 제어함
그렇기때문에, CPU가 있는 본체에 모니터를 연결시킬때에는 비디오카드가 필요하다
그러다보니까 본체의크기가 커짐
이렇게 장비를 만들게 되면 휴대하기가 어려워짐
그래서 휴대용 장비들은 마이크로컨트롤러가 직접 디스플레이장치를 제어하는 형태로 만들었기떄문에, 따로 인터페이스 카드가 필요하지 않다 . 그래서 장비의 크기자체가 줄어듦
요즘에는 마이크로컨트롤러보다 성능이 뛰어난 CPU급의 프로세서가 사용됨 스마트폰에 실제로 피씨용 CPU급의 프로세서가 들어가서 핸드폰이나 컴퓨터나 디스플레이, UI등의 차이만 있지 연산능력은 거의 비슷해졌음
핸드폰뿐만아니라 mp3 이런것들이 모두 다 임베디드시스템임
하드웨어는 씨쁠쁠 MFC공부해야됨
모바일 웹은 자바
알고리즘
: 문제를 해결하는 해결방법, 절차
시간을 줄이기 위함
좋은 알고리즘은 시간이 적게걸리는 것
알고리즘을 먼저 만들고 코드를 작성해야됨
컴퓨터를 이용해서 데이터를 저장하거나 연산
데이터를 처리하기 위해서는 데이터를 입력받아서 어딘가에 저장해야됨
데이터의 준비 -> 데이터를 어딘가에 담아놓음 -> 변수
변수는 데이터를 저장할 메모리공간이름
데이터를 저장하는 변수에도 이름을 붙여야한다
알고리즘을 나타내는 방법
자연어( natural language ) : 말로 표현함
순서도 ( flowchart ) : 조건문 실행문 조건에따라 분기하거나 아니거나
의사 코드( pesudo-code ) : 슈도코드는 정확히 정의된것은없으나 프로그래밍언어를 배운사람이라면 슈도코드를 자신이 알고있는 언어로 변환할 수 있는 정도의 내용으로 나타내면됨
structrued english
if a = 5
then b <- b+1
자연어는 사람의 언어로 나열 자연어로 작성을 해놓으면 개개인이 의역을 함
자기나름대로 판단
사람마다해석이달라지기때문에 정확한 전달이 안될 수 도 있음
그래서 나온게 순서도인데
프로그램이 복잡하다면 순서도로 나타내는것이 불가능함
그래서 사용하는것이 슈도코드인데,
리스트의 형태와 기호의 의미를 알고있는 개발자들은 쉽게 의미를 파악할 수 있다.
의사코드에서 의사는 진짜같은 가짜의 의미를 지니고 있음
여기서 말하는 가짜는 프로그래밍언어는아니지만 모든언어가 쉽게 이해되고 자신이 알고있는 프로그래밍언어로 변환시킬 수 있는 바로직전의 단계 의 의미를 나타냄