[C]C언어 기본

C언어는 AT&T에 근무하던 데니스 리치와 켄 톰슨이라는 인물이 고안해낸 언어이다.(그리고 이와함께 운영체제라는 개념이 탄생하기도 했다)
역사가 오래된만큼 제일 많이 포팅된 언어이고 한때는 꽤나 광범위하게 쓰이던언어였는데 요근래에는 한참후배기수인 C#이나 JAVA같은 언어에 자리를 많이빼앗겨버렸다.
요근래에는 기계나 전자계열에서 쓰이는 수준이고 일반적인 응용프로그램 개발에는 쓰이지 않는 추세다.
한때는 WinAPI라는 윈도우계열의 SDK개발에 주된 언어로써 사용되기도 했으나 이제는 너무나 오래된 이야기고 C++을 통한 MFC에 자리를 내주더니 이내 닷넷(.NET)이라는게 등장하면서 C#에 자리를 내어주고 말았다.
그도 그럴것이 최근에는 객체지향이라는 개념이 기본골자인데… 이 C에서는 객체지향이란 개념이 존재하지 않는다.
그렇다보니 프로그램입문자용 언어로 자주 추천받곤했는데 요근래에는 쓰이는 분야가 한정적인데다 이제 C언어 개발서적 자체도 잘나오지 않다보니 입문을 아예 JAVA나 C#으로 하기를 권하는 추세이다.

일단 입문자용으로써의 장점은 객체지향이란 개념이빠지다보니 이해해야할 내용중에 어려운 부분이 그나마 덜어져나가기때문인데… 사실 이는 어찌보면 혹때고 혹붙이는 성격도 띄기때문에 무조건 쉽다고보기는 어렵다.

요근래의 객체지향 성향을띈 언어나 그 주류언어들을 보면 메모리 관리를 대부분 해당 언어의 중간관리 영역에서 대신알아서해주는 경향이 있다. C#의 경우는 닷넷 프레임워크(.NET Framework)가 그러하고 JAVA는 JVM(Java Virtual Machine[자바 가상 머신])에 가비지 컬렉션(Garbage Collection)이 알아서 관리해준다.

이 C언어는 그런 중간단계가 없다보니 언어를 사용하는 개발자가 직접 컨트롤을 해줘야하는데 이렇다보니 타 언어에 비해 신경써야하는부분이 많은 편이다.
이건 어찌보면 장점이자 단점인데 장점은 개발자가 직접 메모리공간을 사용하고 풀어주는등의 작업을 함으로써 기계에 직접적인 접근이 용이하다는점이고 단점은 앞전에도 설명했듯이 개발난이도의 상승이다.

조금 잡설이 길어졌는데 C언어는 앞서 언급된 객체지향성을 뛴 언어들에비해 룰이 간단한편에 속한다.

객체지향이 아니다보니 클래스란 개념도 없고 그와함께 인스턴스란 개념도 존재하지 않는다.
더불어 함수의 오버로드(다형성을 위한 재사용), 오버라이드(재정의)가 허용되지 않는다.
당연히 클래스가 없다보니 상속, 추상화가 없고 이렇다보니 외우거나 이해해야할 이론이 좀더 간단명료한 편이다.

대신 메모리에 직접 접근하고 제어해야하기때문에 포인터라는 개념이 존재하고 이것이 C언어가 가지는 가장 큰 특징중 하나이다.

변수 또한 클래스가 없다보니 추상화된 클래스 맴버 변수같은것도 없고 오로지 전역이냐 지역이냐 혹은 상수인가 아닌가만 구분할뿐 다른 구분은 필요하지않게된다.

그리고 그나마 인스턴스와 좀 유사한 속성을 뛰는것이 있는데 바로 구조체라는것이다.

그런데 보통 객체지향형 언어들의 클래스를보면 클래스 맴버에 변수는 물론이고 함수도 포함시켜서 클래스 자체가 하나의 기능을하는 구성을 만들어낼수있는데 C에서의 이 구조체는 함수를 여기에 포함시킬수가 없다. 즉 쉽게 생각하면 함수를 포함할수없는 클래스가 바로 구조체이다.

이렇다보니 구조체는 사실 그렇게 많이 쓰이지는 않는편이다. 정말 본인이 라이브러리라도 개발하지 않는이상 구조체라는게 있구나 정도만 알아두어도 문제가 없다.

중점적으로 보아야하는 부분은 다른언어에서도 기초로하고 있는 부분들(변수, 제어문, 배열)과 함수, 포인터가 C언어의 핵심이라볼수있다.