오늘은 K.Knock 첫수업을 했다.
첫 수업은 간단한 리눅스명령어와 C언어에 대한 내용이었다.
일단 케이녹의 수업방식은 특별하다.
길잡이 수업방식이다.
예를 들어 알파벳이 있다면 보통 교사는 알파벳 하나하나를 모두 익히도록 수업한다.
그러나 케이녹에서는 '알파벳!' 하면 집가서 알아서 알파벳을 익혀서 발표하는 형식이다....;;
왜 선배들이 케이녹이 힘들다고 하는지 알것 같기도 하다...
우선 오늘 제시된 길을 걸어가며 깊숙히 들어가보자
우선 세상에는 수많은 컴퓨터 언어들이 있다.
이것들을 흔히 프로그래밍 언어라고 부르는데 많은 사람들이 수많은 언어 가운데 C언어를 첫관문으로 생각한다.
왜일까?
우선 그 수많은 언어들을 분류하는 가장 보편적인 기준이 있다. 그것은 바로 고급언어와 저급언어이다.
이에 대해 설명하기 전에 가장 기본적인것부터 짚고 넘어가자
우선 우리는 한국말을 사용한다. 그렇기 때문에 한국어를 할 줄 아는 사람끼리 의사소통이 가능하다.
그렇다면 우리는 컴퓨터와 대화할 수 있는가?
아니다.
컴퓨터는 0과 1의 조합으로 이루어진 전기신호를 사용한다. 우리가 전기신호를 사용하는 종족과 말을 섞을 수 있는가?
아니다.
그렇기 때문에 우리는 중간에 번역전문가가 필요하다. 그것이 컴퓨터 언어이다.
고급언어에 속할수록 사람이 보기 쉬운 언어가 되고 저급언어에 속할수록 기계가 이해하기 쉬운 언어가 된다.
성격또한 다르다. 고급언어일수록 컴퓨터의 깊은곳까지 만질 수 없다.
반대로 저급언어일수록 사소한것 하나하나까지 명령해야하므로 컴퓨터의 대부분을 파악하고 깊게 들어갈 수 있다.
그런데 왜 하필 C언어일까?
왜냐하면 C언어는 저급언어에 가까운 고급언어이기 때문에 체감적으로는 고급언어이지만
컴퓨터의 깊숙한곳까지 건들 수 있는 공부하기 좋은 언어이기 때문이다.
C언어는 누가 만들었는가?
C언어는 1972년 켄 톰슨과 데니스 리치가 벨 연구소에서 일할 당시 새로 개발된 유닉스 운영체제에서 사용하기 위해
B언어를 보완하여 새로 개발한 프로그래밍 언어이다.
C언어는 어떻게 컴퓨터가 이해할 수 있는가?
C언어역시 고급언어이어서 컴퓨터가 이해하기에는 무리가 있기 때문에 손을 많이 거치게 된다.
우리가 C언어로 프로그램을 코드를 작성했다고 가정하자
보통 C언어로 제작한 코드는 'c'라는 확장자를 갖는다
# 여기서 확장자란 어떤 파일을 어떤 프로그램으로 열어야 하는지 알려주는 지표라고 할 수 있다
예를들어 흔히 볼 수 있는 동영상의 확장자는 'avi'이다. avi는 동영상 파일이니 동영상플레이어로 열라고 알려주는 지표인것이다.
우선 우리가 작성한 코드는 전처리기라는 번역전문가를 만나 번역에 필요한 언어책들을 받는다
# 전처리기란 컴퓨터 처리에서 중심적인 처리를 행하는 프로그램의 조건에 맞추기 위한
사전 처리나 사전 준비적인 계산 또는 편성을 행하는 프로그램이다. 후에 C 코딩을 할 때 맨 위에 헤더를 부르는 과정을 처리한다
첫번째 번역전문가의 손을 거치게 되면 우리가 작성한 코드의 확장자는 c에서 i로 바뀐다.
그다음 컴파일러라는 번역전문가를 만나 본격적으로 해석을 시작한다.
# 컴파일러란 고급언어로 쓰인 프로그램을 그와 의미적으로 동등하며 컴퓨터에서 즉시 실행될 수 있는
형태의 목적프로그램으로 바꾸어주는 번역 프로그램이다.
해석을 마치고는 확장자가 i에서 s로 바뀐다
사실상 여기까지만 와도 컴퓨터와의 의사소통은 성공한것이다. 이제 우리의 코드를 실행 할 수 있다.
하지만 이것을 번역전문가가 없는 기기에서도 실행하고 싶다면 다음과정을 더 거쳐야 한다.
어셈블러라는 번역전문가를 만나 기계어로 번역된 우리코드의 확장자는 s에서 o로
# 어셈블러란 기계어와 거의 일대일로 대응하는 기호로 표현된 언어인 어셈블리언어를 기계어로 번역하는 것이다.
최종적으로 링커라는 번역전문가가 목차를 통해 쉽게 정보를 찾을 수 있게 정리해주면
# 링커란 두 개 이상의 목적 프로그램을 합쳐서 실행 가능한 한 개의 프로그램으로 만드는 작업을 하는 프로그램이다.
확장자가 o에서 exe라는 실행가능한 파일로 바뀌면서 비로소 컴퓨터와의 대화를 완성했다고 볼 수 있다.
이것을 그림으로 표현하면 아래와 같이 설명할 수 있다.
계속 추가적으로 검색하며 정리하다 보니 포스팅이 너무 길어진것 같다.
오늘 배운 리눅스와 C언어의 시작은 다음 포스팅으로 넘어가도록 하자
'Programing > C' 카테고리의 다른 글
C :: C언어의 기본 (0) | 2017.03.18 |
---|---|
C :: C언어란? (0) | 2017.03.17 |
C :: 포맷스트링 (2) | 2017.03.12 |
C :: 자료형에는 뭐가 있을까? (0) | 2017.03.11 |
C :: 변수란 무엇인가? (0) | 2017.03.11 |