본문 바로가기

무언가 만들기 위한 지식/C,C++,Embedded C

Introduction


과감하게도 이제 C/C++에 관한 포스팅도 조금씩 하기로 했다.
예전부터 기본적으로 하기위해 염두에 두었던 부분이었다.
하지만 올리는 내용의 코드들의 대부분은 아마 내가 잊지 않기 위해서, 또는 헷갈리지 않기 위해서 올리는 내용이 대부분일 것이다.
누구에게 과시하거나 소스를 제시하기 위해서는 아니다.
물론 배우는 입장에서 필자와 같은 고민을 하는 사람들도 많이 있으리라 생각하고,
혹시나 그런분들이 블로그에 방문해 주신다면, 그리고 도움이 된다면 그야말로 필자의 본 취지라고 할 수 있겠다.

그리하여 아무쪼록 줏어 들은 C와 C++의 잡설로 시작하려고 한다.

Computer Language에는 참 많은 종류가 있다.
필자도 다뤄보지못한 듣도보도 못한 언어들이 참 많다.
극히 예를 들자면 Lisp, Cobal, Fortran, Snobol, Algol등등이 있다.
1960년대 등장한 Basic까지는 필자가 초등학교 5학년때쯤 다뤄보기는 했다.
생각나는 건 그때 AT, XT 컴퓨터를 운운하면서 Basic으로 만들어진 화살맞추기 게임을 해봤던 기억이있다.
(물론 그건 옛 경험이지, 그후 대학전까지는 내가 컴공계열로 오게될줄은 몰랐다. -.-)
덕분에 Dos상에서의 명령어 처리는 중학교 때까지는 무난했다.
아니 무난하기 보다는 그냥 익숙하다는 표현이 더 어울릴 것 같다.
※ 최근에는 파이썬을 간단하게 다루는 정도로 해봤는데, 방식이 인터프리터 기법이라 참 신선했다.

언어하면 가장 유명한것은 역시 C/C++, 또한 언어의 기초 또한 C/C++이다.
그 연유에는 UNIX의 개발당시 Kernal의 대부분이 C언어로 작성되었고, 그 결과 C언어가 운영체제에서 적합한 언어로 인식되고, 효율성이 입증되면서 대중화 된 것이다.
그 이후 C++로 발전하고 닷넷으로 가고 있으며 요즘에는 Java라는 친숙한 언어가 대세를 이루고 있다.
C++의 경우 OOP에 기준한 설계로 객체지향적이라고 할 수 있으며, Java가 그 최종판이라고 할 수 있다.
강사들의 이야기를 듣거나 책들에서 본 내용을 종합하자면
C++이란 언어는 C와 Java사이의 중간단계이다.
C++의 개발자는 C언어와 Java의 기능을 모두 수용할 수 있는 유동성있는 언어를 추구했지만,
결과적으로 이쪽도 저쪽도 아닌 실패한 언어가 되어버렸다고 한다.
C++이 OOP로 넘어가는 과도기적인 단계임을 고려할때, 그럴수밖에 없을지도 모른다.

사용통계를 보면 C++이 우수한 언어임에도 불구하고 Java와 C에비해 뒤쳐지는 면을 확인할 수 있다.

Position
Oct 2008
Position
Oct 2007
Delta in Position Programming Language Ratings
Oct 2008
Delta
Oct 2007
Status
1 1 Java 20.949% -0.67%   A
2 2 C 15.565% +0.97%   A
3 4 C++ 10.954% +1.37%   A
4 3 (Visual) Basic 9.811% -1.35%   A
5 5 PHP 8.612% -0.89%   A
6 8 Python 4.565% +1.13%   A
7 6 Perl 4.419% -0.93%   A
8 7 C# 3.767% +0.03%   A
9 13 Delphi 3.288% +1.75%   A
10 10 Ruby 2.860% +0.47%   A
11 9 JavaScript 2.670% -0.01%   A
12 12 D 1.333% -0.26%   A
13 11 PL/SQL 1.024% -0.94%   A-
14 14 SAS 0.600% -0.78%   B
15 17 Lua 0.551% -0.04%   B
16 21 Pascal 0.520% +0.10%   B
17 22 ActionScript 0.506% +0.14%   B
18 16 COBOL 0.491% -0.19%   B
19 18 Lisp/Scheme 0.485% -0.09%   B
20 15 ABAP 0.445% -0.40%   B

아래 그래프에서 보면 PHP가 크게 상승했고(길게 보았을때...), 위 표에서는 액션스크립트 델파이등이 상승한 점을 볼 수 있다. ActionScript는 필자도 개인적으로 좀 보고 있는 부분인데 RIA시장이 커짐에 따라 사용되고 있는 듯하고, PHP역시 오픈 소스에다가 웹 어플리케이션에 힘입어 상승한듯 싶다. (AJax란 구분이 없어 아쉽다. 뭐 결국 javascripte겠지만...)



필자는 이제 겨우 컴퓨터 언어에 조금이나마 적응이 된 상태, 말그대로 Beginner정도의 수준밖에 않된다.
사용해본 정도는 Java, C++, C와 기타 스크립트정도이다.
그중에서 가장 사용하기 편한것은 역시 플랫폼 독립적이며 심히 OOP적인 Java라고 들 수 있겠고,
역시나 C가 가장 골치 아프다. 특히 시스템 프로그램의 경우, 그리고 짜잘한 과제..... 짱구를 굴릴 것이 너무나 많아서 C언어는 골치아프다는 표현이 절로 나온다. ㅠ.ㅜ;
Java나 C++에서는 어느정도 편의가 제공되어 간단하게 응용하여 사용할 수 있는 것이 많다.

뭔가 더 주저리 얘기하다가는 근원적인 Computer Language의 현재양상을 꺼낼 것 같고, 잡설쪽으로 갈껏 같아 자제를 하고~
C++에 대해 조금만더 얘기할려고 한다.

모든 언어라는 것이 공부하는 패턴은 똑같다.
그 패턴중에 C와 C++중에 반드시 거쳐야하는 것은
첫째로 포인터의 개념이다. 이부분은 아마 리스트와 트리를 자유롭게 구현할 정도면 거뜬할 것이라고 본다.
특히 이차원배열의 동적할당, scanf에서 두번째 인자가 왜 &가 들어가는지, 문자열과 char *의 컨트롤 을 확실히 안다면 포인터는 더이상 문제가 없다고 본다.
※ 어떤 분의 말로는 포인터를 마스터하면 C언어의 70%이상을 이해하는 거라고 했다.
두번째는 파일 입출력이다. 입출력 버퍼와 파일이라는 개념을 이해한다면 사용이 쉬워진다.(파일이 단순한 폴더내의 파일이 아니다.)
세번째는 struct, class의 자료타입의 이해이다. 배열과의 차이점을 중심으로 자유롭게 사용이 가능해야한다.
네번째는 상속.
다섯번째는 템플릿,
여섯번째는 예외처리
라고 생각한다.
물론 극히!! 주관적인 분류였고 C++중심인 분류이다.
상속의 경우 Polymopism, Overriding, Overloading등의 용어로 개념적으로 복잡하기 때문에 이해하기 쉽지 않고, 템플릿은 아마 상당히 필수적이고 강력히 제공되는 기능임에도 잘 사용하지 않아(공부하는 사람들... 대상) 잘 모르고 넘어가는 경우가 많다.
첫번째에서 세번째는 혼자 공부해도 어느정도 버티겠지만, 상속같은 경우는 꼭 지인의 도움을 받기를 바란다.

나중에 한번 상속과 다형성에 대해 씨부려보고자할 예정이다.~

아 ... 그럼 뭔가 어설픈 서문으로 C, C++에도 서서히 포스팅을 시작하겠다 ㅎ