최근 수정 시각 : 2025-01-23 03:21:44

C(프로그래밍 언어)/관련 책 및 자료

파일:상위 문서 아이콘.svg   상위 문서: C(프로그래밍 언어)

1. 개요

C언어를 공부하는데 도움이 되는 책 및 관련 자료를 정리한 문서

2. 관련 책 및 자료

  • 관련 링크는 YES24로 연결된다.

2.1. The C Programming language

  • 원 저자: 데니스 리치 & 브라이언 커니핸
  • 번역서: (Kernighan의) C언어 프로그래밍
  • 번역자: 김석환(2005년) → 김석환, 박용규, 최홍순(2016년 수정2판)
  • 출판사: 대영사(2005년) → 휴먼사이언스(2016년 수정2판)

다른 언어들의 경우 여러 교재들이 서로 경쟁하는 추세이지만, 유독 C언어의 경우는 창시자인 데니스 리치와 브라이언 커니핸이 쓴 The C Programming language 2nd Edition이 독보적인 위치를 점하고 있다. 이 두 사람의 이니셜을 따서 보통 K&R 이라 칭하거나,[1] 제목을 축약해서 TCPL이라고 부른다. 이 책이 나온 지 매우 오래 되긴 했지만, C언어가 별로 변화가 없는 언어인 데다가 많은 사람들이 C89/90을 표준으로 따르고 있기 때문에 낡은 책이라도 사용에 지장이 없다.

또한, 분량은 전부 다 합쳐도 300쪽도 안 된다. 그것도 Appendix 부분을 빼면 순수 튜토리얼은 200쪽도 안되며, 언어 자체뿐 아니라 프로그래밍에 대한 여러가지 깨알같은 조언까지 다 포함이 되어있다. 보통, 일반적인 프로그래밍 언어 교재가 작아도 500쪽을 가볍게 넘어가고, C++의 창시자인 비아르네 스트로우스트루프(Bjarne Stroustrup)가 K&R과 비슷한 네이밍으로 쓴 The C++ Programming language의 경우 1300쪽에 육박하는 것[2]에 비하면 엄청나게 짧은 분량이다.

K&R이 바이블 취급을 받는 이유는 단순히 역사적이고 C언어 창시자가 쓴 책이기 때문만은 아니다. C언어가 겉으로는 심플해보이지만 워낙 숨은 함정이 많은 언어라 저런 부분들을 제대로 다 짚고 넘어가야 하는데, K&R 이외에 제대로 완전하게 짚어주는 교재가 거의 없다.[3] 보통의 고수준 언어들처럼 접근해서 직관적으로 '이렇게 하면 된다.' 식으로 설명을 하는 교재들이 많은데, 사실 온갖 정의되지 않은 행동(Undefined Behaviour)과 구현 특화 상세 내역(Implementation-specific Details), 하드웨어에 의존적인(Hardware Dependent) 함정들이 곳곳에 숨어 있는 C언어는 '이렇게 하면 된다.' 보다 '이렇게 하면 안된다.'를 중점적으로 설명해야 하는 언어이다. 특히 UI나 퍼포먼스 중심으로 돌아가는 어플리케이션 영역이 메인인 언어들과는 달리, OS와 딱 붙어서 보안이나 안정성 및 호환성이 중시되는 시스템 프로그래밍 영역이 메인인 언어라 어느 정도 깐깐하게 접근하는 게 맞는 언어다.[4] C언어를 C++를 익히기 전의 워밍업 정도로 취급하는 사람들에게는 저런식으로 설렁설렁 쉽게 써진 C언어 교재들도 좋은 평가를 듣는 경우도 많지만, 본격적으로 C언어 프로그래밍을 하려는 사람들 사이에서는 해외 기준으로 K&R과 C Programming: A Modern Approach(일명 K&K)[5] 두 가지 정도만이 제대로 된 교재 취급을 받는다. K&R이 나온 지 오래된 책이기는 하지만 중요하고 핵심적인 사항들은 오늘날에도 변함없이 적용되는 내용들이다. K&R을 나온 지 오래 된 책이라고 무시하기엔 좋은 내용들이 굉장히 많다.

그러나, 분량이 많은 교재들은 그만큼 친절하고 자세한 설명을 동반하여 비교적 술술 읽히는 것에 반해, K&R은 짧은 만큼 매 문장 하나 하나[6]의 중요도가 높기 때문에 프로그래밍 초심자에게 추천할 만한 책은 아니라는 주장도 있다. 심지어 이 책의 한국어판 번역자는 아예 서문에서 대놓고 초심자에게는 적절한 책이 아니라고 했을 정도이다.

게다가 K&R이 좋은 교재인 건 맞지만 오늘날 K&R을 교재로 추천하기가 마냥 좋지만은 않은 이유 중 하나도 책이 너무 오래돼서 초창기 C언어의 유행이나 트릭 정도만을 담고 있고, 그 이후의 여러가지 패러다임의 변화 등을 반영하지 못하고 있기 때문이다.[7] 어차피 저런 걸 모두 담고 있는 교재가 없긴 하지만, 더하고 덜하고 정도의 차이는 있게 마련이고, 그 차이는 나중의 삽질과 시간 낭비로 반드시 뿌린 대로 거두게 된다. 정 K&R을 첫번째 교재로 삼기가 어렵다면 다른 데서 C언어의 기초를 먼저 배우고 복습 차원으로 K&R을 보는 것도 좋다. 그렇게 하면 K&R의 내용 중 구식인 것과 아닌 것을 스스로 가려낼 수 있게 될 테니까.

결론적으로 2020년대 기준 K&R은 초심자가 입문하기에는 좋은 책이 결코 아니다. 다만 중급자 정도의 실력이 되고 복습이 필요할 때, 구식 스타일의 코딩에 대해 알고 싶거나 근본적인 C언어 기능들에 대해 알고 싶다면 K&R을 보기에 좋다고 할 수 있겠다.

2.2. C Programming: A Modern Approach

  • 원 저자: K. N. King
  • 번역서: (없음)
  • 번역자: (없음)
  • 출판사: (없음)

저자의 명칭을 따서 속칭 "K&K"라고 불리며,[8] The C Programming language와 함께 C언어 표준을 준수하면서 세계적으로 인정받은 바이블격 도서 중에 하나다.[9] 다만, 2023년 현재까지도 한국어 번역서가 없어서 영어 원문을 봐야하는지라, C언어 첫 번째 기본 입문서로는 독해하기 어려울 수 있는 게 가장 큰 단점이다. 그나마 다행인 것은 대학교 이상 수준의 영어를 요구하지는 않아서, 수능 영어 독해할 수 있는 실력이면 그럭저럭 읽을 수 있다는 것이다. 결론적으로 수능 영어 독해할 수준이 되는 사람에게는 적어도 K&R보다는 훨씬 입문하기 좋은 책이다.

K&K 책의 분량만 보면 800페이지가 넘어가기 때문에, K&R에 비교하면 2배 이상으로 배울 것이 많아 보일 수도 있다. 하지만 이는 오히려 장점인데, K&R에서 다루지 않는 (비교적 최신 C언어 버전인) C99에 관한 내용까지 다루는 한편, 어려운 설명을 최대한 풀어서 썼다는 소리이기 때문이다.[10] 직접 읽어보면 나름 술술 잘 읽히고, 설명도 자세하고 친절한 편이며, 어려운 단어들은 최대한 안쓰거나 풀어 쓰려고 한 것이 느껴진다. 어렵기로 악명 높은 C언어의 포인터를 설명하는 부분도, 부가설명을 많이 하고 나름 그림까지 많이 동원해가며 이해하기 쉽게 설명하려고 노력한 흔적들이 보인다.

2008년에 마지막 최종본이 나왔기 때문에 코딩 스타일은 위의 K&R보다는 최신 트렌드를 따라가지만 밑의 여러 최신 책들보다는 구식이다. 정확히는 C99라는 1999년에 발표된 표준을 지키도록 안내하는데 그 덕분에 K&K로 C언어를 배우면 C99 스타일을 엄격히 지키는 코드를 작성할 수 있게 된다. 아쉬운 점은 2008년에 출판했다는 특성상 C11이나 C18 등의 최신 C언어에 대해서는 다루지 않기 때문에 최신 C언어 트렌드를 배우려면 다른 책을 추가적으로 공부해야 한다는 것.[11] 나쁘게 말하면 최신 용어나 개념에 대해서는 내용이 책에 없는 것이지만, 좋게 말하면 어떤 구식 컴파일러에서든 돌아가는 코드를 작성하는데에는 도움이 되는 책인 셈이다.[12] 그리고 C89와 C99 사이의 차이에 대해서도 엄격히 구분해서 안내하기 때문에 C89 방식으로 구닥다리 스타일 코드를 쓰는 것도 배울 수 있을 뿐만 아니라,[13] C89(즉 K&R에서 다루는 ANSI C)와 그 이후 C99 등의 나름 최신 C언어와의 차이를 익히는 데에도 쓸모가 있다.

K&K는 영문 원서 특성상 오프라인에서는 구하기 힘든 책이고 온라인 해외배송으로 시켜야 책을 볼 수 있는데, Wayback Machine 사이트에 원문 책이 통째로 공개되어 있으며 위키독스에 어떤 개인이 한글로 번역한 것도 공개되어 있으니 돈 없는 사람들은 이걸로 공부해도 된다. 다만 한글판에는 문제가 많은데, 우선 반 정도밖에 번역이 안 돼서 뒤쪽에 중요한 내용은 어차피 원서를 봐야 하고,[14] 공식 번역이 아니라 개인이 번역했기 때문에 번역 품질도 엄청 좋지는 않으며,[15] 실물 책으로 볼 수 없는지라 인터넷이 연결돼야만 볼 수 있다는 단점이 있다. 게다가 개인 번역자에 따르면, 번역권 문제 때문에 장래에도 위키독스 번역본은 공식 출판이 어려울 것 같다고 한다. 이런 저런 문제 때문에 수능 영어 독해할 수준이 되는 실력이면 원서를 구해 보는 것이 낫다.[16]

2.3. Modern C

  • 원 저자: Jens Gustedt
  • 번역서: 모던 C (전문가를 위한 C 작성법!)
  • 번역자: 남기혁
  • 출판사: 길벗

2019년 기준 C11/C18 표준과 현업에서의 C언어 프로그래밍 스킬 및 트렌드에 대해 입문자 수준부터 전문가 수준까지 깊이 있게, 정확히 체계적으로 설명하고 있다. 입문용으로도 좋으며, K&K나 K&R을 다 읽은 중급자 이상이 C11/C18에서 변한 표준을 알아보거나, 최신 C언어 트렌드를 알려고 할 때도 유용하다고 평가받는다. 2019년 12월 출시됐고, 번역서는 2022년 1월 중순에 길벗 출판사를 통해 나왔다. 영어로 된 원서는 인터넷에서 pdf로 받을 수 있다. 다만, 원서의 경우 K&K보다도 영어 수준이 높기 때문에 수능 독해 이상의 영어 실력이 필요하며,[17] 이미 시중에 그럭저럭 번역이 잘된 한국어 번역본도 있기 때문에,[18] 굳이 원서로 공부할 필요는 없을 것으로 보인다.

2.4. C Primer Plus 6th Edition

  • 원 저자: Stephen Prata
  • 번역서: C 기초 플러스 6판
  • 번역자: 윤성일, 이선민, 조혜란
  • 출판사: 성안당

K&R이나 K&K 같은 두 바이블 양대 산맥의 도서만큼은 아니더라도 C언어 최신 표준이 충실하게 반영된 도서이다. 새로운 표준이 등장할 때마다 여러 차례 개정돼서 최신 개정판 기준으로 1000페이지가 넘는다. C언어 학습용 첫 번째 도서로써는 두꺼운 분량이라는 진입 장벽이 있지만 C11 표준을 다루는 몇 안 되는 번역서라서 이를 제대로 배우고자 하는 학습자에게 십중팔구 추천서로 거론되는 책이다. 한국에서는 'C 기초 플러스'라는 번역서로 현재 C11 표준까지 반영된 6판까지 출판됐다. 하지만 내용 자체가 너무 길어서 장황하게 보이기 쉬운 탓인지 입문자에겐 중도 포기하기 쉬운 게 단점이다.

2.5. C언어 펀더멘탈

  • 저자: 전웅
  • 출판: 한빛미디어

한국인이 쓴 책 중에서는 C99 표준을 제대로 정확하게 설명하는 몇 안되는 중급서. 실제 프로그래밍 도구의 사용법이나 하드웨어 특화적인 내용을 설명하지는 않기 때문에 직접적으로 곧바로 프로그래밍 스킬을 늘려주지는 않지만, C언어 전반에 대해 단단한 기반 지식을 형성해주는 책이라 할 수 있다. C언어 구석구석의 내용까지 충분한 설명 및 예제와 함께 다루기 때문에 구해서 읽을 수만 있다면 C언어 자체에 대한 이해에 큰 도움이 될 것이다. 일단 이 책의 범위까지만 익히면 암호문 같던 컴파일러의 에러 메시지가 해석이 되고, 컴파일러 매뉴얼의 각 항목들이 왜 그렇게 쓰여졌는지가 이해가 된다. 그러나 유감스럽게도 현재는 절판되어 있다. 저자는 한때 han.comp.lang.c 뉴스 그룹과 KLDP에서 답변자로서 왕성한 활동을 보인 바 있다.

서평을 검색해보면 호불호가 극명하게 갈리는데, 이는 해당 책의 관점 때문이다. C언어 표준의 관점에서 C언어를 설명하고 있기 때문에 용어 자체가 생소한 것들이 많은데, 컴파일러 대신 구현체(implementation)와 같이 일반적으로 잘 쓰이지 않는 용어를 사용한다던가, 정의되지 않은 동작(Undefined behavior)과 같이 사전 지식 없이는 오해되기 쉬운 표준의 용어들을 빈번하게 사용하기 때문에 적절한 사전 지식이 없다면 글 자체를 읽기가 어렵다. 한편으로는, 널리 사용되지 않는 오래된 아키텍처의 범위까지도 포괄하기 때문에 일반적인 프로그래머들이 받아들이기 힘든 부분들도 많이 포함되어 있어, 이해하기 어렵다거나 불필요한 내용이 너무 많다는 악평들이 많다. 만약 알기 쉬운 입문서를 기대하고 이 책을 읽는다면 큰 실망을 하게 될 것이다.

반면에 중급자의 수준에서 C언어의 깊이있는 부분을 제대로 알고 싶다면, 이만큼 자세하고 알기 쉽게 설명한 책도 달리 없다. 적어도 한국에서는, C FAQ 온라인 번역문 이외에는 이와 비슷한 내용을 접하기조차 쉽지 않다. C++의 경우에는 언어가 복잡한 만큼 오히려 Effective C++과 같은 중간 교량 역할을 하는 책들이 있지만 순수 C언어는 오히려 그런 책들이 드물고, 따라서 이 책의 가치는 더더욱 높을 수밖에 없다.

2.6. 열혈 C 프로그래밍

  • 저자: 윤성우
  • 출판: 프리렉(2003년) → 오렌지미디어(2010년)

한국 한정으로 유명한 C언어 도서 중에 하나로, 초판 당시엔 '열혈강의 C 프로그래밍'이었으나 개정되면서 책 이름도 '강의' 글자만 빠진 이름으로 바뀌었다. 컴퓨터 하드웨어 구조에 대한 기초 지식이 없는 입문자에게 추천하는 책으로 널리 알려져 있다. 그런 독자를 타겟으로 집필된 기본서다보니 어려운 개념은 빠져있는데 여기까지는 초보자용 C언어 기본서로서 납득할 수 있는 부분이지만, 하필 중요한 개념 중에서도 오개념이 많이 존재하는 데다(대표적으로 Call by Reference) 소개하는 문법마다 C언어 표준인지 비표준인지 명확하게 구분하지 않아 전문가들에겐 혹평을 받는 책이다. 거기다 소위 트릭이라고 말하는 함정들을 거의 다루지 않는다. C언어 표준을 제대로 공부하고 싶은 학습자, C언어로 실무를 봐야 하는 현업자에겐 추천하지 않지만, 프로그래밍 입문자에겐 이해하기 쉽게 서술되어 있어서 C언어 첫 번째 교재로써는 나쁘지 않다. 이 책으로 입문하는 대신 제대로 배우고 싶다면 다른 좋은 기본서로 이어서 학습하는 것이 좋다.[19]

2.7. 혼자 공부하는 C언어(구 이것이 C언어다)

파일:9791169210911.jpg
저자 서현우
출판 한빛미디어

뇌를 자극하는 C 프로그래밍의 저자가 집필한 C언어 입문서. 입문서이기 때문에 열혈 C 프로그래밍과 비슷한 한계를 지니고 있지만 C언어 첫 번째 교재로서 많이 추천받으며, 대학에서 프로그래밍 입문 교재로 쓰는 경우도 있다. 2019년부터 책의 내용은 거의 그대로 유지한 채 개정 연도인 2019년에 맞춰 컴파일러를 Visual Studio 2013에서 2019로 바꾸고, 가독성과 가시성을 높인 개정판 '혼자 공부하는 C언어'로 출판되었다. 2023년 개정판이 출간되었다.

2.8. C언어 코딩 도장

  • 저자: 남재윤
  • 출판사: 길벗

상술한 국내 서적들과 마찬가지로 비슷한 한계를 가지고 있다. 파이썬 코딩 도장과 함께 코딩 도장 시리즈의 저자가 쓴 책으로 본래 인터넷으로 책 내용을 공개했었으나 현재는 책을 구매하지 않으면 열람하지 못하도록 유료화되었었으나, 다시 무료로 공개되었다. 연결 리스트 구현처럼 코딩 테스트에서 나올 만한 알고리즘에 대해서도 일부 다룬다. 주차마다 심사 문제가 제공되며 이를 온라인으로 풀수 있다.

2.9. 터보 C 정복

  • 저자: 임인건
  • 출판: 가남사(1999)

PC통신 시절 국내 한정으로 C언어 레퍼런스 중 하나만 꼽으라고 하면 열의 다섯은 주저 없이 이 책을 꼽았던 명저로, 특히 배열과 포인터에 관한 설명은 당시 국내 도서 중에서는 비교 대상이 없다는 평가를 받았던 책이다. 1299페이지라는 압도적인 두께가 흠이긴 하지만, 그만큼 물샐 틈 없이 설명을 해주고 있다.

다만, 지금 시점에서 읽겠다면 시대적인 한계와 Turbo-C를 기준으로 쓰여진 책이라는 점은 고려를 해야 할 것이다. 1991년에 벌써 5판이 발매된 너무 오래된 책이기도 하거니와, 요새처럼 C언어 표준 드래프트 문서를 곧바로 받아볼 수 있는 시대에는 그 자세한 설명도 의미가 퇴색될 수밖에 없다.

저자인 임인건씨는 도스 시절 한라프로라는 인기 한글 라이브러리를 만들었던 사람으로, 그의 PC통신 아이디인 터보이빨(turbo28)과 프로그래머 십계명으로도 유명하다.

2.10. 기타 관련 자료 소개




[1] 주의해야 할 것은, K&R C와 착각하면 안된다. 인터넷에서 검색하면 (주로 C언어 역사) K&R이라는 단어를 K&R C를 지칭하며 사용하는 경우도 가끔 있다. K&R C는 ANIS C 이전 버전의 '언어'이고, 현재 이 페이지에서 칭하는 K&R 은 C언어 교재이며, K&R 1st Edition은 표준화 이전 K&R C의 교재이고, 본문의 K&R 2nd edition은 표준화된 ANSI C(C89) 교재이다. [2] 3차 개정판 1000쪽, C++11로 업데이트 된 4차 개정판에서 1300쪽 [3] 그나마 K&R만큼 완전히 짚어주는 교재는 후술할 K&K(C Programming: A Modern Approach)라는 교재가 뽑히는데, 이 때문에 K&R과 묶여서 C언어의 바이블로 취급할 정도로 이 두 책은 고평가받는다. [4] 그렇기에 더더욱 초심자에게는 어울리지 않는다. [5] 저자의 이름인 킹(K. N. King)의 앞 글자를 땄다. [6] 실제로 아주 중요한 내용이 구석탱이에 딱 한줄 써있는 경우가 많다. [7] 참고로 후술할 K&K라는 책은 2008년에 최종판이 출판됐는데도 이미 고전 취급받는데, K&R은 최종판이 1988년에 출판됐으므로 거의 40년 전 책이다. 그만큼 K&R이 오래된 책이며, 구닥다리 내용을 담고 있기 때문에 C언어의 최신 트렌드를 익히는데는 도움이 안된다는 소리다. [8] 위의 유명한 K&R이라는 책과 대구를 맞추려고 K&K라고 부르게 됐다는 소리도 있다. 다만, K&R에 맞먹을 정도로 좋은 평가를 받는다는 소리이기도 하다. [9] 최신 C언어 트렌드를 따라가는 프로그래머들도, 오래됐지만 K&R과 K&K는 읽어볼 가치가 있다고 평가하는 경우가 많다. 그만큼 두 책이 고평가 받는다는 소리다. [10] 게다가 중요한 내용은 꼬박꼬박 강조 표시를 해서 분량은 많아보이지만 중요 포인트는 잘 보이는 것도 장점이다. 특히 상술했듯이 C언어 특성상 피해야 할 행동이 매우 많은데, K&K에서는 이런 것들은 제발좀 피하라고 굵은 글씨와 느낌표와 박스까지 쳐가며 강조 표시를 해놨다. 반면, K&R은 중요한 문장을 평범하게 표시해 놓는 등 강조 부분에서 배려가 살짝 부족한 편이다. [11] 게다가 C99에서 잠깐 존재했다가 이후에 사라진 문법인 VLA같은 것을 유용한 문법이라고 K&K 본문에서 안내하기도 한다. VLA는 스택 오버플로를 낼 가능성이 있기 때문에 프로그래머들은 웬만하면 사용을 꺼리고, 심지어 최신 C 컴파일러에서는 VLA이 들어간 코드를 컴파일할 시 오류를 뿜으면서 컴파일이 안되는 경우까지 있다. 결국 K&K만 읽었다고 좋은 코드를 작성할 수는 없으며, 최신 C언어 트렌드를 따로 배워야 한다는 소리가 된다. [12] 상술했듯이, 애초에 2020년대에도 실무에서 C18 등의 최신 표준을 지키는 코드를 쓸 일이 거의 없다. 실무 코드베이스에서 C언어를 쓴다는 것 자체가 엄청나게 오래 된 컴파일러와도 호환돼야 할 요구 조건이 있을 확률이 높기 때문이다. 이런 면에서 볼 때 구식 컴파일러에서도 잘 작동되는 코드를 안내한다는 점에서 K&K은 나름 괜찮은 입문서라고 평가할 수 있을 것이다. [13] 이렇게 C언어 버전을 구분해서 안내하는 책이 별로 없다. [14] 책 특성상 뒷 단원과 앞 단원을 왔다갔다 하면서 모르는 개념을 참고하거나 복습할 부분이 많기 때문에 이 단점이 더욱 뼈아프다. [15] 위키독스 사이트 특성상 댓글로 번역 수정할 것을 건의하면 언젠가 수정이 반영되기는 한다. [16] 단 어려운 용어나 개념이 나올 때 한글 번역을 조금 참고하는 용도로는 상당히 좋다. 무엇보다 공짜이니.. [17] 모던 C 책에서는 C11/C18를 설명하거나 새로운 C언어 트렌드를 안내하면서 새로운 개념과 새로운 용어가 많이 등장한다. 때문에 이미 C언어와 관련된 영어 용어들을 잘 아는 사람이 아닌 이상, 모르는 단어가 많이 나와서 독해하기가 쉽지 않다. [18] 다만 이 번역에 대한 비판이 좀 있다.표현 같은게 크게 어색한 것은 아닌데, 원서랑 비교하면 누락된 내용이 있다는 것. 직접 pdf와 책을 비교해보고 판단하는 것을 추천한다. [19] 단 한 권의 책으로 높은 프로그래밍 언어 실력을 갖추는 것은 어렵다. 또한 권장되는 서적들이 프로그래밍 입문자에게는 어렵게 다가올 수 있으니, 비교적 쉬운 입문서들로 시작하여 여러 서적을 두루 읽는 것이 권장된다.

파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 문서의 r1669에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r1669 ( 이전 역사)
문서의 r ( 이전 역사)