본문 바로가기

프로그래밍/C언어

[C언어] C언어는 무엇인가?


먼저 C언어를 접하기에 앞서서

학교 강의시간에 자바(Java)를 먼저 배웠습니다.

그 당시에는 프로그래밍언어라는 것을 접해보지 않았기에 막연한 어려움 반 기대감 반으로

수업을 듣고 시험치고 그렇게 흥미를 키워나갔는데요.

정말 기초만 배우고 나서 외국길에 올라서서 C언어를 다시 잡기까지 그동안에 배웠던걸 다 잊어버렸네요.

내머리속에 지우개..;

영국 어학연수 후 프로그래밍에 대한 튼튼한 기초를 쌓고자 다시 시작한 C언어!

참고로 이 카테고리 페이지에서는 제가 공부한걸 정리하고 필요한 정보를 제공하기 위함임을 미리 알려드립니다. ^^

---------------------------------------------------------------------

막상 어릴때 C언어라고 하면 막연한 경우가 많았는데요.

컴퓨터 프로그램을 만들때 쓰는 언어라해서 왠지 101010101010111100000 이런 말도안되는 것들을

배우고 쓰고 외우고 할줄 알았더라는.. 하긴 맞는말이죠 ^^;

일단 C언어도 한국어 영어 프랑스어 일본어와 같은 언어입니다.

어렵게 생각할 필요는 없겠죠? 일단 미국인 영국인과 같은 영어권국가 사람들과 대화를 할때 영어가 필요하고

일본사람과 대화할때는 일본어가 필요한 것 처럼 컴퓨터와 대화를 하기 위해선 이 프로그래밍 언어가 필요한겁니다.

프로그래밍 언어도 우리 사람들처럼 언어가 굉장히 많아요. 이쪽에 조금이라도 관심있으시다면

들어봤을겁니다. 익히 아시는 C언어, C++, C#에서 JAVA 등등등 (제 아는한도내에선.. 이것밖에.. 뭐라 말할게 없네요! ㅠㅠ)

여러언어가 있지만 모두다 C언어에서 비롯되었단 말씀! 그래서 C언어를 배우고나서 다른언어를 배우면

다들 쉽게 배울수있다! 라고들 하시지만.. 뭐 해봤어야 알겠죠?

C++의 경우는 요즘 나오는 안드로이드 운영체제에 프로그래밍할때 쓰이는것으로 알고있고,

자바같은 경우는 주로 웹에서 쓰이고 최근에 썬마이크로 시스템즈에서 인수해서 데이터베이스 관련해서 배울때 자바의 중요성도 커지고 있다는데요.(잘못된 정보는 알려주세요 ^^)

이래나저래나 모두 다함께 C언어를 닦고나서! 다른언어를 배우도록 합시다~

앞에서 제가 컴퓨터는 10101과 같은 숫자를 주고받는다라고 말했는데요. 사실입니다.

0과 1을 매개로한 2진체계의 언어체계가 이 컴퓨터 놈들이 알아듣는 언어라는건데요.

이것을 두고 기계어라고 합니다. 기계가 알아들을수 있는 언어죠.

이것을 어찌 사람이 보고 이해를 할수 있겠습니까?! 이런 말도 안되는..

뭐 트랜스포머에 나오는 걔네들이라면 알아듣겠지..

그래서 컴퓨터와 사람사이에 서로의 의견정보를 공유할수있는, 쉽게이야기하면,

컴파일러라는 만능 번역가가 있는데요.

사람이 입력한 명령어와 정보를 컴퓨터가 알아들을 수 있는 이진데이터(0과 1)로 바꾸기 위해서 컴퓨터가

번역을 합니다. 이것을 컴파일(compile)이라고 부릅니다. 그리고 이 번역을 하는놈을 컴파일러(compiler)라고 하구요.

그런데 여기서 사람이 내리는 명령어가 이렇다면..

"너 내가 1과 2를 더할건데 그 값을 출력해"

"1과 2를 더해줘"

"1과 2의 합은?"

사람마다 하는 말이 다 다르겠죠? 그것들을 다 알아들을수 있을정도로 컴파일러가 인공지능(?)을 가진것도 아니고..

뭐 그정도라면 프로그래머가 필요없겟죠? ㅋ

그래서 영어나 국어에도 문법이 있는것처럼. 일정한 규칙을 가진 프로그래밍언어 문법이 존재합니다.

그 문법들은 영어로 기술되어있죠. 기초적인 영어만 아신다면 가능합니다 ^^

자 이렇게 문법들을 기반으로 컴파일러와의 대화에 필요한 언어를 프로그래밍언어라고 합니다.

위에서 말한바와 같이 여러언어가 존재하구요. C언어가 그들의 조상이 되는데요.

왜 이렇게 C언어가 다른언어들보다 오래되었는데도 불구하고 아직도 쓰이고 있는걸까요?

추후에 이야기 할테지만 C언어는 사용자가 프로그래밍 할때 컴퓨터 메모리에 대해 접근이 용이합니다.

그래서 C언어는 저급언어(Low-level langage)이다라고 말을 많이 하는데요 이는 고급과 대비대는 저급이라는 뜻이 아니라

다른언어들이 컴퓨터 사용자에 더 친숙하고 편리를 도모한 쉬운언어라면

이 C언어는 사용자보다도 컴퓨터에 더 친한애라고 보면 됩니다. 그래서 메모리에 직접적인 접근이 가능한데요.

이와 관련해서는 뒤에 배울 포인터와도 연관이 됩니다. 이게 C언어의 무기죠!!

메모리를 직접 다루다 보니 프로그램 크기를 작고 실행속도를 더 빠르게 만들어줄수 있습니다.

그렇다면 다른언어 자바와 같은 언어들은 고급언어(high-level language)가 되겠죠?

자! 그렇다면 여기서 C언어의 특성을 알아봅시다.

1. 절차지향성

2. 이식성

3. 좋은성능

절차지향성이라는 말은 고등학교 중학교때 순서도에 대해서 배우셨나요?

위에서 아래로 순서대로 즉 정해진 순서에따라 실행이 되기때문에 배우기가 용이합니다.

다음은 이식성. 옛날 다른언어는 cpu 의 종류에 따라 만든 프로그램이 실행 불가능하기고 하고 가능하기도 했는데

C언어로 작성된 프로그램은 그럴 걱정이 없습니다. 다른종류의 컴퓨터에서도 내가 만든 프로그램을 얼마든지 돌릴수 있다는거죠!

좋은성능은 위에서 말한 메모리와도 상관있습니다. 메모리를 직접 다룸으로해서 보다 효율적인 프로그램을 만들수 있는거죠!

여기서 주의할건 메모리를 다루는 저급언어이기 때문에 다른 고급언어들과는 달리 조심해서 다루어야 합니다.

잘못했다간 컴퓨터를 날려버리는 일이 발생한다는거죠. 이에대한 자세한 얘기는 포인터를 다룰때 얘기하죠.