Getting Started KNK!

CharliePark·2020년 8월 31일
0

TIL

목록 보기
17/67

C의 고전 교재 KNK를 공부하며 정리한 내용입니다. C Programming: A Modern Approach

따배씨를 마치고, 부록 자료구조를 공부하다가 여러 번의 부침을 겪었다. 결국 따배씨 부록 공부는 일단 중단했다.

복습이 부족하고 내용을 100% 체화시키지 못해서라고 이유를 추측해본다. 시간적 여유가 있다면 조금 빨리 듣는 부분이 있더라도 따배씨 전체를 다시 듣고 빈 부분을 메워가는 게 최선이겠지만, 어쩔 수 없이 필요한 부분만 차선으로 공부해야겠다..

고 생각을 했는데, 어차피 따배씨 이후에 KNK와 KNR을 추가로 보기로 생각하고 있었던 터라, 바로 KNK로 넘어가기로 했다.

따배씨와 KNK가 큰 난이도 차이를 갖는 것도 아닐 것이고, 무엇보다 따배씨 복습에서 가장 중요한 것은 '어느 부분을 모르는지' 아는 것이기 때문에, KNK역시 동일한 효과를 만들어줄 것이라고 생각된다. 부족한 부분은 KNK와 따배씨로 이중 복습이 가능하다는 점에서 KNK로 넘어가는 것은 나쁘지 않은 선택으로 생각된다. Abstract Data Type 을 KNK (2판) 에서 다룬다는 부분도, 바로 KNK로 넘어가게 된 선택의 이유가 됐다

KNK를 통해 얻고자 하는 바는 다음과 같다

  1. C를 내것으로 만들자
    모호하기 짝이 없는 목표이지만, 현재 C의 웬만한 문법과 기능을 다 사용할 줄 알고, 웬만한 문제도 다 풀 수 있는 상태에서, 진짜 문제점을 찾아서 나열하는 것은 대단히 어려운 일이다. 이 부족한 부분을 찾아서 해결하는 것 자체가 이 공부의 목적이라, 뭉뚱그려서 'C를 내것으로 만들자'라고 표현하게 되었다. 굳이 방점을 찍자면 C의 Advanced Features(preprocessor, structures .etc)에 찍는 게 될 것이다.
  2. C의 사용 목적을 이해하자
    C는 만능 도구가 아니다. OOP의 개념이 적용되어 있지 않고, 포인터를 필두로 한 메모리 문제는 약점이다. 이 외에도 C의 강점과 약점을 이해하여 사용 목적을 뚜렷이 하는 것이 C를 '제대로 쓰기 위해' 배우는 것이 될 것이다.
  3. C의 철학을 이해하자
    KNK에 이어 K&R 까지 이어질 목표이다. C의 철학을 제대로 이해하자.
  4. Low-Level에 관련된 이해를 높이자.
    이후 CSAPP나 OS 관련 공부를 하기 위해 필요한 목표이다. 코더를 프로그래머로 빠르게 성장시킬 때 C가 도움이 된다는 것도 low-level을 다루고 컴퓨터 자체에 대한 이해를 필수적으로 수반하기 때문일 것이다. Low-level을 정확히 알고 그 내용을 체화시키자. 어떤 언어든지 그 이해를 바탕으로 공부하면 더 나아질 것이다.

이제부터의 내용은 KNK에서 정리한 내용이다.

Introducing C

1.1 History of C

C - UNIX OS를 만들기 위해 생긴 언어

기존의 어셈블리어는 각 기계마다 다른 문법을 가져 이식성이 없었다. 이에 최초의 C언어는 B 언어 등을 기반으로 'portable' 한 어셈블리어를 만들고자 하는 과정에서 생겨났다.

C 표준

C를 만든 데니스 리치가 Kernighan과 함께 써낸 책 K&R은 C의 표준으로 쓰였으나, 모호한 내용과 추가된 기능으로 표준의 필요성이 대두되었다. 이에 ANSI C가 생겼고 이후 ISO 에서 C89표준, C99 표준을 만들었다. (현재는 C11, C18까지 표준이 나왔으나, 확장성을 갖는 C++과 달리 C는 보수적으로, 표준에 변화가 적다)

0개의 댓글