본문 바로가기
C언어

C언어 공부, 어떻게 해야할까?

by algosketch 2019. 1. 22.

 C언어는 다음과 같은 특징을 갖고 있다.


- 타 언어에 비해 빠르다. 

- 저수준 언어다. (수준 떨어지는 언어라는 뜻이 아니라 하드웨어, 기계어에 가까울수록 저수준이라고 부른다. 고급 언어다, 저급 언어다 글 쓰는 곳마다 다른데 어셈블리어 - 기계어와 가장 가까운 언어- 로 코딩을 하진 않으니 본인은 저급, 저수준 언어라고 부른다.)

- 절차지향적이다.

- 버그가 발생하기 쉽다.


 첫 언어로 C언어를 공부하는 것도 나쁘지 않은 선택이다. 많은 언어들이 C언어에서 파생되었고 많은 컴퓨터 관련 서적이 C언어를 기반으로 작성되었기 때문이다. (자료구조, 알고리즘, 소켓 프로그래밍은 C언어로 작성된 서적이 많다.) 처음 배울 때에는 낯선 것에 대한 어려움이 있고 뒤로갈수록 내용 자체가 어려워 포기할 수도 있는데 열심히 배워두면 굉장히 도움이 되는 언어이고 미래에도 사라지지 않을 거라 확신하는 언어이다.


1. 프로그래밍이 처음이다.


 첫 프로그래밍 언어로 C언어를 선택했다. 필자와 출발이 같다. 본인은 중학교 때 처음 접했고 그 때의 수학적 배경지식으로도 C언어를 배우는 데 무리가 없었다.

 시작하자마자 겪게 되는 것은 뒤에서 설명하니 지금은 이해할 필요가 없다는 말이다. 모든 코드를 다 이해하고 넘어갈 수도 없고 그럴 필요도 없지만 적어도 그때그때 공부하는 내용은 정확히 알고 넘어가야 한다. 그렇지 않으면 나중에 개념이 꼬이고 아무것도 할 수 없는 상태가 된다. C언어 문법(C언어를 공부한다는 것은 C언어 문법을 공부하는 것이다.) 공부를 마치고 나면 처음 배울 때 몰랐던 것을 알아야 한다. 더 나아간다면 각각의 소스가 어떤 과정으로 돌아가는지 추측할 수 있다. (여기서는 소스라고 표현했지만 구체적인 예를 들자면 printf는 함수이고 그 안에 들어가는 것은 인수라는 것을 깨달을 수 있다. 이와같은 깨달음은 다른 언어를 배울 때에도 도움이 되며 공부에 대한 흥미도 생긴다. 물론 이 말을 지금 이해할 수는 없다.)


- 컴퓨터의 사고 방식을 이해한다.

- 항상 더 효율적인 코드를 생각한다.

- 이해했다면 반드시 타이핑한다.


 프로그래밍은 사람의 사고방식을 기계가 생각할 수 있는 형태로 바꾸는 과정이다. 기계와 같이 생각한다면 프로그램의 효율이 증가하므로 기계의 방식을 이해하는 것은 중요하다. 예를 들어 미로찾기를 한다면 사람은 약간은 감이라는 것에 의존하지만 이걸 컴퓨터가 찾도록 코드로 옮긴다면 모든 경로를 다 검사할 준비가 되어 있어야 한다.

 프로그래밍에서의 효율에서 중요한 것, 중복을 피하라. 간혹 어쩔 수 없는 경우를 제외하고 코드나 로직에서 중복이 된다면 더 빠르거나 더 짧은 코드를 쓸 수 있는 여지가 있다. 이 부분은 실력에 있어서 매우 중요한 부분이므로 항상 더 좋은 코드에 대한 욕심을 가져라.

 백문이 불여일견이라는 말이 있다. 그리고 프로그래밍에서는 백견이 불여일타라는 말이 있다. 이해했다면 반드시 타이핑하라. 혹은 타이핑 한 후에 이해해도 좋다. 최대한 익숙해지려 노력해야 한다.



2. 파이썬과 같은 언어를 경험해 봤다.


 C언어와 중복되는 내용도 있고 중복되지 않는 내용도 있을 것이다. 중복된다면 어느 부분과 대응되고 중복되지 않는다면 장점과 단점을 생각해보라. 이와 같은 생각은 각 언어의 특징을 이해하는 데 도움이 된다.

 기존의 코딩 방식을 버리고 새 언어에 맞는 코딩 방식을 따라야 한다. 물론 대부분은 그대로 사용하면 되기 때문에 큰 부담을 가질 필요는 없다. 앞서 말했던 중복되지 않는 특징을 이용하면 기존 코드를 더 효율적으로 짤 수 있는 방법이 존재할 수도 있다.


3. C언어 전체보기


- 자료형

- 연산자

- 조건문

- 반복문

- 함수

- 배열

- 포인터

- 문자열

- 구조체

- 선행처리

- 파일처리


 모든 언어가 거의 비슷한 부분은 조건문, 반복문, 함수이고 한 번 익혀두면 계속 쓰기 때문에 별로 어려울 것 없는 내용이다. 

 "가장 중요하다"까지는 아니지만 C언어 하면 떠오르고 다른 언어와 구분되는 특징이며 가장 어렵다고 불리는 부분은 포인터이다. 개념 자체는 안 어려우니 겁 먹을 필요 없다.

 배열까지만 공부하면 이것저것 만들 수 있다. 검은화면밖에 못 보기 때문에 뭘 하겠나 싶겠지만 생각을 못 할 뿐이지 공부한 내용 안에서 굉장히 많은 것들을 할 수 있다.



--- 그냥 하고 싶은 말

 이제 거의 10개째 언어를 공부하고 있습니다. 언어가 각각의 특징을 갖는 언어 3~4개만 익히면 나머지는 그 안에서 이 특징 가져오냐 저 특징 가져오냐 차이이기 때문에 새 언어를 익히는 시간이 굉장히 짧아집니다. 마음만 먹으면 주말만 투자해서 새 언어를 익힐 수 있죠. 기본만 익혀놓고 막히면 구글링하면 되기 때문에.. 네이버보다는 구글