본문 바로가기

추천 검색어

실시간 인기 검색어

C 개발 마스터클래스 2

챗봇 등 6가지 프로젝트를 함께 만들어 봅시다.
양상봉 지음
온북

2023년 08월 03일 출간

(개의 리뷰)
( 0% 의 구매자)
eBook 상품 정보
파일 정보 pdf (54.21MB)
ISBN 9791198374318
지원기기 교보eBook App, PC e서재, 리더기, 웹뷰어
교보eBook App 듣기(TTS) 불가능
TTS 란?
텍스트를 음성으로 읽어주는 기술입니다.
  • 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를​ 읽을 수 있습니다.
  • 전자책 화면에 표기된 주석 등을 모두 읽어 줍니다.
  • 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.
  • '교보 ebook' 앱을 최신 버전으로 설치해야 이용 가능합니다. (Android v3. 0.26, iOS v3.0.09,PC v1.2 버전 이상)

PDF 필기 Android 가능 (iOS예정)
소득공제
소장
정가 : 44,000원

쿠폰적용가 39,600

10% 할인 | 5%P 적립

이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.

카드&결제 혜택

  • 5만원 이상 구매 시 추가 2,000P
  • 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
  • 리뷰 작성 시, e교환권 추가 최대 300원
시리즈 전체 2
C 개발 마스터클래스 2
44,000
C 개발 마스터클래스 1
33,000

작품소개

이 상품이 속한 분야

사람들이 코딩을 배우는데 실패하는 99%의 이유는 튜토리얼의 지옥에 빠져 있기 때문입니다.
함께 무언가를 만들지 않는 튜토리얼은 반드시 피하십시오.
"C 개발 마스터클래스"는 C 프로그래밍을 쉽게 배우고 우아하게 사용할 수 있도록, 6가지 개발 프로젝트를 통해 가이드하고 있습니다.

ChatGPT와 연계한 나만의 챗봇, 언어 변환기, 스크립트 분석기 등 6가지 프로젝트를 함께 만들어 봅시다.
C 언어를 배우는 사람들이 즐거운 개발 경험을 가질 수 있도록, 다양한 규모의 프로젝트를 성공적으로 수행해 온 20년차 개발자가 여러분의 귀중한 시간을 아껴 드립니다. 혼자 가지 말고 함께 갑시다.

책 내용 중 궁금한 점은 저자에게 물어 보세요! 저자와의 대화 채널 URL :
https://cafe.naver.com/ArticleList.nhn?search.clubid=31031000&search.menuid=5&search.boardtype=L
머리말 19

저자 소개 19
C 언어가 당신에게 줄 수 있는 것 22
누구를 위한 책인가? 25
이 책은 이렇게 합니다 27
두 권으로 구성 28
샘플 코드와 6가지 프로젝트 28
'호기심 많은 사람을 위하여' 와 '도전과제' 29
인쇄 규칙 30
여러분께 기대합니다 30


13. 데이터를 영구적으로 보관하는 파일 file 32

13.1. 여기서 살펴볼 내용 33

13.2. 화면에 출력하듯 파일에 출력하는 fprintf 34
파일과 파일 포인터 34
화면에 출력하는 printf, 파일에 출력하는 fprintf 37
파일을 여는 fopen 39
파일을 닫는 fclose 42
파일에 데이터를 출력하는 fprintf 43
예외처리 로직 44
파일을 사용할 때 공통적으로 삽입되는 코드 47
사용된 코드들 49

13.3. 키보드로 입력받듯 파일로부터 입력 받는 fscanf 50
친절한 scanf 함수 50
까칠한 fscanf 52
많은 데이터를 읽으려면? 57
사용된 코드들 60

13.4. 텍스트 파일을 더 잘 다뤄 봅시다-쓰기 fprintf, fputs, fwrite 61
파일의 mode 를 더 잘 다뤄 봅시다 61
골라 쓰는 다양한 파일 출력용 함수 64
printLampInfo 함수를 파일용으로 바꿔봅시다 65
3가지 함수 fprintf, fputs, fwrite 비교 77
사용된 코드들 79

13.5. 텍스트 파일을 더 잘 다뤄 봅시다-읽기 fscanf, fgets, fread 80
파일로부터 데이터를 읽는 다양한 함수들 80
fscanf, fgets, fread 비교 90
사용된 코드들 93

13.6. 파일의 내용을 수정해 봅시다 94
파일 내의 현재 위치란? 95
파일 위치를 원하는 곳으로 지정해 봅시다 100
파일의 현재 위치를 이동시키는 fseek 102
파일의 현재 위치를 알려주는 ftell 108
사용된 코드들 110

13.7. 피해야 할 습관, 하드코딩! 111
data.txt 외에 다른 파일을 보고 싶다면? 111
case1. 하드 코딩 방식의 해법 113
case2. 하드 코딩 방식보다 더 좋은 방식은? 114
사용된 코드들 122

13.8. 바이너리 파일을 다뤄 봅시다 123
바이너리 파일이란? 123
step1. 바이너리 mode 로 파일 열기 127
step2. 바이너리 모드로 파일 읽기 129
헥사로 데이터 출력하기 Hexdump 131
fread 함수로 바이너리 모드로 읽기 135
step3. 바이너리 모드로 쓰기 137
사용된 코드들 138
호기심 많은 사람을 위하여 139
도전해 봅시다 142
Challenge 1. 142
Challenge 2. 143
해결방법 예시 143
섹션을 마치며 148


14. App3-LanguageTranslator. 언어 번역기를 만들어 봅시다 150

14.1. 여기서 살펴볼 내용 151

14.2. 역사적 배경과 필요한 기능 목록 153
프로그램의 개요 153
모스 부호란? 155
모스 부호의 국제표준 157
morse 프로그램의 사용 사례(usecase) 159

14.3. 기능 개발하기-main 과 checkOption 164
최상위 기능 "morse utility" 개발하기 164
하위 기능1-checkOption 함수 개발 169
하위 기능2-anomalyReport 함수 개발 173

14.4. 기능 개발하기-toMorse (데이터 구조와 알고리즘) 176
toMorse 인코더를 개발해 봅시다 176
필요한 데이터 177
필요한 알고리즘1 - 입력파일 검사 181
필요한 알고리즘2 - 영문 텍스트를 모스 코드로 변환하기 187
모스 부호의 "공백"에 관한 규칙 197

14.5. 기능 개발하기-toMorse (예외와 에러 처리) 202
에러 처리 202
알고리즘 보강하기: 단어 식별 알고리즘 204
이 알고리즘을 그림으로 표현하기: 상태도 State Diagram 206
필요한 데이터 208
필요한 알고리즘 209
예외 처리 216

14.6. 기능 개발하기-toText 219
모스 부호 디코더 개발 219
필요한 데이터 221
필요한 알고리즘1. 모스 부호를 영문 텍스트로 변환하기 223
알고리즘을 C 언어로 번역하기 229
필요한 알고리즘2. 모스 부호를 영문 텍스트로 변환하기 240

14.7. 개발 후 검토와 개선 아이디어 242
1. 테스트 및 디버깅용 코드 제거 242
2. 코드 구조 조정 245
개선 아이디어1-Korean to Morse code translator 246
개선 아이디어2-출력 매체 변경 248
개선 아이디어3-모스 부호 변환 서비스 프로그램 249
사용된 코드들 251
호기심 많은 사람을 위하여 252
도전해 봅시다 259
Challenge 1. 259
해결방법 예시 263
섹션을 마치며 266


15. 긴 코드는 분할해서 관리합시다 268

15.1. 여기서 살펴볼 내용 269

15.2. 파일 분할에 필요한 3가지 배경지식 270
배경 지식 270
배경지식1. C 파일의 컴파일과 링크의 작동 방식 271
배경지식2. include 매크로의 작동 방식 274
배경지식3. 모듈화 원리 Modularization 278

15.3. 프로그램 소스 코드의 분할 anomaly.c, .h 286
코드 분할 준비 286
이상 보고서 기능 분리하기 290
중요: 헤더 파일 작성 시 주의사항 296
분할 컴파일 방법 298

15.4. 프로그램 소스 코드의 분할 encode.c, .h 306
복습: 프로그램 소스 코드를 분할하는 방법 306
인코딩 기능 분리하기 307
분리 중에 만나는 컴파일 에러와 extern 315

15.5. 프로그램 소스 코드의 분할 decode.c, .h 317
디코딩 기능 분리하기 317
step1: decode.c 작성 318
step2: decode.h 작성 321
step3: main.c 분할 컴파일 대응 324
선택사항: main.h 작성 325
헤더 파일 작성 시 주의 사항 327

15.6. 개발 후 검토와 개선 아이디어 329
1. anomaly.c 에서 전역변수 제거 329
2. 외부 변수 사용을 허용하는 extern 제거 332
개선 아이디어 336
사용된 코드들 338
도전해 봅시다 339
Challenge 1. 339
해결방법 예시 340
섹션을 마치며 342


16. 프로그램과 생명주기를 함께하는 static 344

16.1. 여기서 살펴볼 내용 345

16.2. static 데이터를 다뤄 봅시다 346
static 사용법 #1. 전역변수(global variable)를 외부 소스 파일로부터 차단하기 346
static 사용법 #2. 지역변수(local variable)의 값을 보존하기 351
static 사용 시의 에러 핸들링 354
사용된 코드들 361
호기심 많은 사람을 위하여 362
섹션을 마치며 365


17. 중요한 메모리 366

17.1. 여기서 살펴볼 내용 367

17.2. 프로그램이 사용하는 메모리 구조 368
프로세스와 메모리 368
프로세스의 메모리 구조 372

17.3. 예시: 프로세스가 메모리에 적재되는 과정 378
1단계: 프로세스가 실행되기 직전 378
2단계 : main 함수 호출 시 379
3단계 : main 에서 함수 function1 호출 시 380
4단계 : function1 함수가 종료되어 main 함수로 반환 시 381
프로세스가 사용할 수 있는 메모리 크기 382
스택 영역과 힙 영역의 크기 384

17.4. 동적 메모리를 사용해 봅시다 387
메모리를 할당하는 두 가지 방식 387
메모리 식별자 즉, 이름 390
요약정리: 동적 메모리 사용 절차 393

17.5. 동적 메모리 할당 관련 함수들 397
1. 메모리 할당용 함수 malloc 397
2. 깨끗한 메모리 할당용 함수 calloc 403
3. 메모리 재할당용 함수 realloc 404
4. 할당된 메모리를 해제하는 함수 free 406

17.6. 메모리 다룰 때 알아 두면 유용한 기타 함수들 409
1. 메모리를 원하는 값으로 채워주는 memset 409
메모리 내용을 복사하는 memcpy 411
기타 : 사용을 권하지 않은 함수 413
동적 메모리와 정적 메모리! 둘 중 무엇을 써야 할까? 417
사용된 코드들 419

17.7. 실습1: Singly Linked List 를 만들어 봅시다 part1 420
링크드 리스트 개념 420
링크드 리스트 종류 423
싱글 링크드 리스트 425
싱글 링크드 리스트에 필요한 데이터 구조 427
Node 타입과 LinkedList 타입의 사용 예시 430

17.8. 실습1: Singly Linked List 를 만들어 봅시다 part2 444
step1. 리스트 정보 만들기 444
step2. pushFront : 리스트 맨 앞에 노드를 추가하는 기능 445
step3. makeNode : 노드 생성용 함수 449
step4. printList : 리스트 내의 모든 노드를 보여주는 함수 452
step5. printNode : 노드를 보여주는 함수 454
step6. popFront : 리스트 맨 앞 노드를 삭제하는 함수 457
step7. isEmpty : 리스트가 비어 있는지 확인하는 함수 460
step8. freeNode : 노드에 할당된 메모리 제거하는 함수 460
step9. eraseAllList : 리스트 내의 모든 노드를 삭제하는 함수 462

17.9. Singly Linked List 코드 재사용을 위한 파일 분할 465
list.h 헤더 파일 분리 465
list.c 소스 파일 분리 467
분리한 파일 사용하기 468
사용된 코드들 470

17.10. 실습2: Doubly Linked List 를 만들어 봅시다 471
더블 링크드 리스트 472
1. 기존 타입 수정 475
2. 도우미 함수 수정/개발 476
사용된 코드들 494
호기심 많은 사람을 위하여 496
도전해 봅시다 506
Challenge 1. 506
Challenge 2. 507
Challenge 3. 509
해결방법 예시 510
섹션을 마치며 524


18. 디버깅 526

18.1. 여기서 살펴볼 내용 527

18.2. 프로그램을 디버그 해 봅시다 528
사전지식 529
환경설정1. 디버깅을 위한 빌드 설정: settings.json 531
환경설정2. 디버거 설정: launch.json 532
프로그램을 디버깅해 봅시다 538
초 간단 디버거 사용법 540

18.3. 디버거를 더 잘 사용해 봅시다 546
Breakpoint 사용법 546
중단점을 더 잘 사용해 봅시다 Conditional Breakpoint 547
디버깅 중에 소스 코드를 수정했다면? 550
강제 종료되는 프로그램의 디버깅 551

18.4. 실행하지 않고 버그를 찾아주는 lint 560
lint 배경 지식 560
CppCheck 설치 방법 563
lint 가 잘 작동하는지 확인해 봅시다 573

18.5. 자주 만나는 코딩 실수들 576
1. 경계값 오류 576
2. 입력값 누락 오류 578
3. 짝이 맞지 않는 오류 582
4. 명령문을 끝맺지 않은 오류 588
사용된 코드들 590
호기심 많은 사람을 위하여 591
섹션을 마치며 592


19. App4-WordCounter. 워드카운터를 만들어 봅시다 594

19.1. 여기서 살펴볼 내용 595

19.2. 버전1-워드 카운터 개발 598
진화적 프로토타입 모델 Evolutionary Prototype Model 598
Phase 1. 요구분석 599
Phase 2. 프로토타입 설계 602
Phase 3. 프로토타입 개발 607
프로그램 테스트 614

19.3. 버전2-워드 분석기 개발(고도화1차) 620
Phase 4. 고객평가와 Feedback 620
Phase 2. 빠른 설계 622
Phase 3. 빠른 개발 628

19.4. 버전2.1-치명적인 버그 발견과 버그 픽스 part1 639
Phase 4. 고객평가와 Feedback 639
Phase 2. 빠른 설계 642
Phase 3. 버그 픽스 개발 643
더 많은 테스트 케이스 649

19.5. 버전2.1-치명적인 버그 발견과 버그 픽스 part2 654
Phase 3. 정렬 기능 개발 654
step1. 빈도수 순으로 정렬 655
step2. 같은 빈도수끼리는 알파벳 순으로 정렬 658

19.6. 버전3-블랙리스트 추가(고도화2차) 666
Phase 4. 고객평가와 Feedback 666
phase 2. 빠른 설계 667
Phase 3. 빠른 개발 669

19.7. 개발 후 검토와 개선 아이디어 679
개발후 검토-중복된 코드 제거 679
개선 아이디어-URL 을 사용해서 텍스트 파일 받기 680
개선 아이디어-통계 기능 추가 684
사용된 코드들 687
호기심 많은 사람을 위하여 688
섹션을 마치며 692


20. App5- APAS. 대기오염정보분석시스템(Air Pollution information Analysis System) 개발 693

20.1. 여기서 살펴볼 내용 694

20.2. APAS 가 무엇인지 알아봅시다 697
APAS 란? 697
프로그램 구성 700
정보연계 프로토콜 703
20.3. 발급받은 인증키를 테스트해 봅시다 708
발급받은 API 인증키 테스트 708
주의사항 712
정보연계 프로토콜 문서 - 개발자용 714

20.4. program1 - 수집모듈 - 정보연계 716
APAS 프로젝트 폴더 구조 716
정보연계 기능 개발 722
정보연계용 명령어 라인 만들기 723
C 코드 - 명령어 라인을 실행 725
프로그램의 인트로 729
수집모듈을 별도 C 파일로 분리 730

20.5. program1 - 주기적인 실행 733
주기적으로 실행하는 방법 733
현재 시각 표시 738

20.6. program1 - 공용 C 파일 다루기 741
프로그램들 간에 소스 파일 공유 방법 741
컴파일 옵션 설정 - 분산된 소스 파일용 745
공통 코드 분리, 한 번 더! 749

20.7. program1 - 설정 파일 다루기(ini 파서) part1 757
환경설정 파일 - apas.ini 757
ini 파서 759
알고리즘 760
데이터 구조 761
알고리즘 구현 #1 - 파일 순회 - ini_parser.c 763
중간 검토 - 코드의 구성 - common.h 765
알고리즘 구현 #2 - 라인의 종류 파악 766
다양한 테스트 케이스 사용과 에러 처리 768

20.8. program1 - 설정 파일 다루기(ini 파서) part2 769
오탐 에러 제거 769
알고리즘 구현 #3 - 일치하는 키 값을 저장 774
20.9. program1 - ini 파서 개선과 함수 포인터 790

핵심 포인트 - '기능'을 입력값으로! 790
기능을 입력값으로 전달하는 함수 포인터 function pointer 791
step1: keyHandler 함수 분리하기 796
step2: keyHandler 함수를 iniParse 함수에 입력값으로 전달하기 798

20.10. program1 - 수집모듈 - 데이터 추출(json 파서) part1 803
json 포맷 804
json 파서 807

20.11. program1 - 수집모듈 - 데이터 추출(json 파서) part2 815
알고리즘 구현 #1 - 파일 순회 815
collector 소스 파일 817
알고리즘 구현 #2 - 유효한 객체인지 확인 825
알고리즘 구현 #3 - 원하는 대기오염정보를 리스트에 저장 831

20.12. program1 - 수집모듈 - 원장(마스터 파일) 저장 837
마스터 파일 포맷 837
알고리즘 838

20.13. program1 - 분석모듈 - 통계 작성 847
통계 파일 포맷 847
분석용 최상위 기능 - analyzer 함수 849
알고리즘 #1 - analyzer 850
알고리즘 #2 - makeStatistics 851

20.14. program1 - 분석모듈 - 알람 작성 866
알람 파일 포맷 866
알고리즘 - makeAlarmFile 868
사용된 코드들 874

20.15. program2 - 운영모듈 - 메인 메뉴 876
메인 C 파일 877
알고리즘 #1 - 메인 메뉴 877

20.16. program2 - 운영모듈 - Menu1. 대기오염 현황 조회 885
알고리즘 #2 - 대기오염 현황 조회 (시도/일/시간별) 885
알고리즘 구현 886

20.17. program2 - 운영모듈 - Menu2. 알람 현황 조회 896
알고리즘 #3 - 알람 현황 조회 (시도별) 896
알고리즘 구현 900

20.18. program2 - 운영모듈 - Menu3. 통계 조회 904
알고리즘 #4 - 대기오염 통계 조회 (시도별/일별) 904
알고리즘 구현 905
사용된 코드들 909
호기심 많은 사람을 위하여 912
섹션을 마치며 913


21. App6- myChatBot(마이 챗봇). ChatGPT와 연계해서 나만의 챗봇 만들기 915

21.1. 여기서 살펴볼 내용 916

21.2. 인증키를 발급받읍시다 918
ChatGPT의 API 인증키 918
인증키 발급 절차 919
발급된 API 인증키를 테스트해 봅시다. 922

21.3. 마이 챗봇 SW의 구성 926
고려사항 927
main 함수 만들기 928
한글 입력시 문제 해결방법 931
마이 챗봇용 환경변수 설정하기 932
정보연계 935
윈도우 환경에서 외부 명령어 실행 시 문제해결 940
정보추출 946
ChatGPT의 답변을 보여주기 956
'한글'로 질문해 봅시다 958
에러 메시지 처리 963

21.4. 개발 후 검토와 개선 아이디어 967
개선 아이디어#1 967
개선 아이디어#2 975
개선 아이디어#3 978
사용된 코드들 985
섹션을 마치며 988


22. 코딩의 경계를 넘어서 ...... (See Beyond) 990

22.1. 여기서 살펴볼 내용 991

22.2. 프로그래밍의 심리학 992
기억의 한계 992
원칙1 - 가능한 기억해야 할 것을 적게 만들기 996
원칙2 - 함수 내에서 가능한 빨리 빠져나가자! 머리속이 복잡해지기 전에! 998
원칙3 - 중첩된 블록의 깊이는 1 을 유지하자 999

22.3. 프로그래밍의 미학 part1 1007
왜 미학이 필요한가? 1007
방법1 - 들여쓰기 1008
방법2 - 대/소문자 원칙 1010
이름 붙이는 방법 - Naming 1013

22.4. 프로그래밍의 미학 part2 1018
도구1 - 추상화 1019

22.5. 프로그래밍의 미학 part3 1028
단순화를 잘하려면? 1028
코딩도 결국은 글쓰기 1031

22.6. 프로그래밍의 논리학 part1 1036
워밍업 퀴즈 1037
논리를 간단하게 만드는 방법 1040
간략화가 잘 안되면 Divide and Conquer 합시다 1047

22.7. 프로그래밍의 논리학 part2 1050
논리식 간략화에 도움이 되는 불 대수 Boolean algebra 1050
논리는 정확성을 요구합니다 1051
논리 작성을 잘하고 싶은 사람을 위한 조언 1055
사용된 코드들 1059
호기심 많은 사람을 위하여 1061
섹션을 마치며 1067


참고자료 1069

색인 1071

예외 처리 로직이 없으면 코드는 더 간단합니다. 하지만, 예상되는 예외가 있을 때, 그에 대한 처리 로직을 작성하는 것은 아주 좋은 습관입니다. 여러분이 작성한 프로그램이 강건(robust) 해 지기 때문입니다. _46

하드 코딩 된 값을 고정값이라고 부릅니다. 고정값은 코드 내에 존재하는 암과 같은 존재이므로 가능한 제거해야 합니다. _114

책에서 소개한 아래 코드를 리눅스에서 실행해도 잘 됩니다. 리눅스에서는 생성된 파일의 크기가 13 바이트입니다. 그런데, 윈도우 환경에서의 파일 사이즈는 14 바이트입니다. 왜 다를까요? _139

점과 선을 조합해서 문자를 표현하는 모스 부호는 인터스텔라, 기생충 등의 영화에서 사용될 뿐 아니라, 드라마와 광고에도 종종 등장하므로 우리에게 익숙합니다. 모스 부호 번역기 개발이 여러분께 즐거운 경험이 되기를 바랍니다. _152

"에러와 예외는 프로그램 작동이 '정상'인가 여부로 구분할 수 있습니다."... 예외는 사용 사례의 3가지 시나리오 중에서 "예외 흐름"에 해당하므로, 정상적인 작동 사례 중 하나입니다. 반면에, 에러는 사용 시나리오가 될 수 없는 "오류" 나 "오작동" 이 발생한 것이므로, 한 마디로 프로그램이 비정상인 것입니다. _202

코드 구조 조정... 프로그램은 정상적으로 실행되는 것이 가장 중요하고, 그 다음으로 중요한 것은, 코드를 읽기 좋게 만드는 것입니다. _245

키(key data) 즉, 검색 조건을 마치 인덱스처럼 사용해서 원하는 데이터를 한 번에 검색하는 key-value 매칭 방법 3가지... switch-case 문, 다이렉트 주소 테이블(DAT: direct-addressing table), 그리고 해시 테이블(hash table) 중에서 해시 테이블(hash table) 이란 무엇인가요? _252

상태의 변화를 다루는 알고리즘을 표와 상태도로 작성하는 방법을 보았습니다. 이제 우리는 이벤트에 따른 상태의 변화를 상태도로 표현할 수 있을 뿐 아니라, 상태도를 의사 코드로 그대로 바꿔 쓸 수 있습니다. _267

모듈화의 1차적인 목적은 문제를 해결하기 쉽게 작은 조각으로 만드는 것이고, 궁극적인 목적은 시스템의 분해를 통해 재사용성을 향상하는 것입니다... 모듈화에는 원칙이 있습니다. "응집도(cohesion)는 높이고, 결합도(coupling)는 낮춰야 합니다."... 한 마디로 말하면, 모듈은 가능하면 '독립적'으로 수행되어야 한다는 의미입니다. _279

지금까지, static 키워드를 사용하는 2가지 방법을 봤습니다. 이제 우리는 전역변수 또는 함수를 외부 파일에서 사용하지 못하도록 차단할 수 있습니다... 하지만, static 변수는 코드를 읽기 어렵게 만들기 때문에, 가능한 사용하지 말아야 한다는 것도 압니다. _365

실행파일이 사용하는 4가지 메모리 영역을 이해하면, 여러분이 용도에 맞게 메모리를 선택하는데 도움이 됩니다. _367

"데이터 구조를 구현할 때 '동적 메모리'와 '정적 메모리' 중에서 무엇을 써야 할까요?" 결론부터 말하면 가능하면 정적 메모리를 사용하는 것이 좋습니다... 동적 메모리를 쓰는 것이 좋다고 판단되었더라도, 정적 메모리로 대체할 수 있는 방법이 있는지 한번 더 검토합시다. 만약, 검토 결과가 Yes 라면 조금 소스 코드가 길어지더라도, 정적 메모리를 사용할 것을 권합니다. _417

VSCode 내에서 디버거로 디버깅하기 위한 "환경 설정"을 해 봅시다. 두 가지 설정이 필요합니다. 첫 번째는, 실행파일을 디버깅용으로 빌드해야 합니다. 두 번째는, 이 실행파일에 디버거를 연결해야 합니다. 즉, 디버깅을 위한 "빌드 설정"과 디버거를 위한 "연계 설정"을 해야 합니다. _530

실행하지 않고 버그를 찾아주는 lint... 버그의 원인을 찾는 또 다른 방법이 있습니다. 실행파일 없이 소스 코드를 분석해서 이상이 있을 것 같은 부분을 찾아주는 것입니다. 이 방법을 static code analysis 즉, 정적 코드 분석이라고 부르며, 이를 지원하는 도구를 lint(린트) 또는 linter 라고 부릅니다. _560

코딩 중에 자주 접하게 되는 코딩 실수를 몇 가지 살펴보았습니다. 이제 우리는, 유사한 실수의 원인을 찾고 해결 할 수 있을 뿐 아니라, 실수 경험을 쌓아감에 따라 점점 실수를 최소화할 수 있습니다. _592

개발과정에서 "진화적 프로토타입 모델"이라고 부르는 개발 프로세스를 경험했습니다. 이제 우리는 초기 버전을 바탕으로 고객의 feedback을 받을 수 있을 뿐 아니라, 반복 점진적으로 기능을 고도화 할 수 있습니다. _692

개발 프로젝트를 수행하다 보면, 프로그램들 간에 특정 소스 파일을 공통적으로 사용해야 할 때가 있습니다. 소스 파일을 어떻게 분할하고 공유하고 컴파일하는지 방법을 알아 봅시다. _741

20.11. program1 - 수집모듈 - 데이터 추출(json 파서)... 이 장의 초점은 json 파서를 완성하는 것입니다. _815

포털에 정보연계를 하기 위해 REST API를 사용해 보았습니다. 이제 우리는 chatGPT 나 Google 등 인터넷 상의 REST API를 제공하는 수 많은 시스템에, 인증키와 API 를 사용해서 데이터를 요청하고 받는 프로그램을 개발하는 방법을 압니다. _913

6번째 개발 프로젝트로 마이 챗봇을 개발할 것입니다. ChatGPT와 연계해서 채팅 서비스를 제공하는 프로그램입니다. 이 섹션에서 배운 내용을 활용하면, ChatGPT 를 파인 튜닝해서 여러분만의 챗봇을 만들거나, ChatGPT기반의 여러 아이디어를 서비스로 출시할 수 있을 것입니다... 요즘은 앱(Application) 안에 AI를 삽입하는 것이 붐입니다. _916

기본적으로 코딩은 문제 해결에 관한 것입니다. 하지만, 코딩의 경계를 넘어서려면 그 이상이 필요합니다. 이번에는 코딩을 다른 관점에서 살펴보려고 합니다... "프로그래밍의 심리학과 미학, 그리고 논리학이 그것입니다." _991

한 번에 기억할 양을 줄이려면... 깊이를 낮게 유지해야 합니다. _1001

코드의 겉모습은 프로그램의 실제 성능과는 관련이 없으며, 프로그램은 잘 작동되는 것이 가장 중요합니다. 하지만, 코드의 겉모습도 예뻐야 하는 것입니다... 읽기 힘들게 만들어진 소스 코드는 코드에서 악취가 난다는 점에서 쓰레기와 같습니다. 악취 나는 소스 코드를 수정하는 것은 쓰레기 장에서 일하는 것과 같습니다. _1007

Naming... 이름을 붙일 때 기억해야 할 가장 중요한 원칙은 간명함입니다. 이름은 간단하고 의미는 명확해야 합니다. _1013

너무 어렵거나 복잡해서 도저히 어디서부터 해결을 시작해야 할지 모르는 문제를 만나면 어떻게 해야 할까요? "축소해야 합니다."... 주어진 과제를 컴퓨터로 해결할 만한 크기로 축소하는 작업이 바로 추상화입니다. 추상화란 단순화이며, 여러분이 꼭 보유하시기를 바라는 중요한 생각 도구 중 하나입니다... 축소한다는 것은 꼭 필요한 것만 남기고 나머지는 버리는 작업입니다. 주사위 게임을 예로 들어 추상화 과정을 보겠습니다. _1019

단순화를 잘하려면? 필자의 경험으로부터 도움이 될 만한 5 가지 방법을 소개하겠습니다. _1028

선택을 한다는 것은 결국 비교를 한다는 것입니다. C 언어는 조건식을 사용해서 비교합니다... 여기서는 조건식의 논리를 보다 간단하고 명확하게 만드는 방법을 배울 것입니다. 동일한 결론에 도달하는 조건식이 여러 개라면, 오컴의 면도날(Occam's Razor)처럼 가장 단순한 해결책이 최상의 선택일 가능성이 높습니다. _1036

코딩은 선택의 연속이고, C 언어는 조건식을 사용해서 선택하므로, 조건식의 논리를 보다 간단하고 명확하게 압축하는 방법을 소개했습니다. 이제 우리는 프로그래밍의 논리학적 측면을 활용해서 컴퓨터에 의한 선택과 결정을 아주 단순하게 만들 수 있습니다. _1067

시작하는 것도 어렵지만, 좋게 마무리하기는 더 어렵습니다. 그런 의미에서 "코딩의 경계를 넘어서" 온 여러분은 이미 승리자입니다. "잘 했어, 아무개야!"라고 자기 이름을 외치면서, 자신에게 박수를 쳐줍시다. 여러분이 프로그램을 개발하면서 즐거운 개발 경험을 갖기를 바랍니다.

2권에서는기본기능을 더 잘 다루는 방법과,실제 현업에서 다루는 주제들을 배웁니다.

사람들이 코딩을 배우는데 실패하는 99%의 이유는 튜토리얼의 지옥에 빠져 있기 때문입니다.
함께 무언가를 만들지 않는 튜토리얼은 반드시 피하십시오.
"C 개발 마스터클래스"는 C 프로그래밍을 쉽게 배우고 우아하게 사용할 수 있도록, 6가지 개발 프로젝트를 통해 가이드하고 있습니다.
각 프로젝트의 목표는 다음과 같습니다.

[ 1권의 프로젝트 ]
App1-Up & Down 게임 개발: 프로그램을 개발하는 초간단 '절차'를 배웁니다.
App2-HerosQuest 게임 개발: 지금까지 배운 C 언어의 '기본'적인 내용을 프로젝트를 통해 익힙니다.

[ 2권의 프로젝트 ]
App3-언어 변환기 개발: 파일 핸들링과, 인코더ㆍ디코더 개발 방법을 익힙니다.
App4-스크립트 분석기(워드 카운터) 개발: 포인터 및 메모리 핸들링과, '반복ㆍ점진적' 개발 방법을 익힙니다.
App5-APAS(대기오염정보 분석 시스템) 개발: REST API 핸들링과 여러 프로젝트에서 재사용할 수 있는 '공통 모듈'을 개발하는 방법을 익힙니다.
App6-myChatBot 개발: ChatGPT와 연계해서 나만의 챗봇을 만드는 방법을 익힙니다. C 언어와 스크립트를 함께 사용하는 방법뿐 아니라, 다른 프로젝트에서 개발한 공통 모듈과 유사한 코드를 재사용해서 빠르게 개발하는 방법을 익힙니다.

6가지 프로젝트는 20년 간 많은 프로그램을 만들고, 유지 보수한 경험과 현장의 성공과 실패, 실수로부터 배운 교훈과 통찰을 바탕으로 만들었습니다.
이 책은, 생애 처음으로 C 언어를 배우는 여러분의 귀중한 시간을 아껴 드립니다. 이제, 여러분의 C 개발 경험은 달콤해질 수 있습니다.

작가정보

저자(글) 양상봉

"프로그래밍에 대한 사랑을 발견한 20년차 개발자입니다."

개발 언어를 사용하는 사람들이 즐거운 개발 경험을 가질 수 있도록 돕는, 스윗 프로그래밍의 양상봉입니다.

초기에는 C 언어로 현장의 프로젝트를 수행할 때 어려움이 많았습니다. 어려움을 하나씩 극복해 나가면서 혼자 고민하고 고생해서 발견한 것들을 모두 이 책에 담았습니다. 여러분은 저처럼 초반의 진입장벽에 걸려 시간과 에너지를 낭비하지 않기를 바랍니다. 이 책이 끝날 때 쯤에는 그 어떤 언어보다 C 프로그래밍이 쉽고 편하게느껴질것입니다.

저는 프로그래밍에 대한 사랑을 발견하고 전자계산학과에 진학했고, AI 석사 학위를 받았고, 20년 간 SW 업계에서 일하고 있습니다.

글로벌 초대형 프로젝트인 인천국제공항 통합정보관제시스템 구축, 대형 프로젝트인 전자정부 21대 과제(기획재정부) 수행, 구축 중인 신백운공항(중국)을 오픈할지 여부를 결정하는 테스트 프로젝트 수행, 수천만에서 수억 건에 이르는 입회신청서를 실시간으로 검색하는 보험사 및 카드사용 이미지 시스템 개발, 인터넷 전화 녹취시스템 및 WhoWho 서비스 개발 등 30개가 넘는 대형 프로젝트를 성공적으로 완료했습니다.

SW 프로젝트의 인터내셔널 성공률이 평균 30%에 불과한데, 제 경우는 한 개 외에 모든 SW가 다년간 사용되었거나 현재까지 잘 사용하고 있으므로, 이 점은 특별히 자랑스럽습니다.

경력의 절반인 10년은 C, Python, 스크립트 언어 등을 사용해서 서버 프로그램을 개발해 왔습니다(백 엔드). 2017년부터는 Android 와 iOS 어플리케이션을 개발하고 있습니다(프론트 엔드). 이 경험으로부터 더 나은 책과 영상을 제작하는데 큰 에너지를 얻고 있습니다.

IT가 미래라는 것을 확신하기 때문에, 저의 목표는 모든 사림들이 코딩을 배울 수 있도록 접근성을 높이는 것입니다. 즉, 프로그래밍을 배우는 사람들이 훌륭한 학습 경험과 즐거운 개발 경험을 갖도록 돕는 컨텐츠를 제작하고 있습니다. 이를 통해 여러분이 프로그래밍하는 시간이 달콤한 시간이 되기를 바랍니다.

[주요 업무]
SW 모델러ㆍ개발자, 개발 방법론 개발자, 품질 관리자, PM(프로젝트 관리자), ISP 컨설턴트, 강사 등.

[주요 프로젝트 이력 - 모델러, 개발자, PM, 컨설턴트, 강사 등의 역할 수행]
ㆍ 전자정부 21대 과제 수행 : 디지털 예산회계시스템 고도화 사업(PM), 디지털 예산회계시스템 개발 사업(PL)
ㆍ 공항 프로젝트 수행 : 인천국제공항 IICS 구축, 신백운공항(중국) 테스트
ㆍ 이미지/OCR 시스템 개발 사업 : 삼성화재 신청서 이미지 시스템 개발, 삼성카드 입회신청서 이미지 시스템 개발, 제일제당 FAX OCR 시스템 개발, ICIS OCR 전환 개발 등
ㆍ 통신 관련 제품 개발 : 인터넷 전화 녹취 SW 개발, WhoWho SW 개발 등
ㆍ 방법론 개발 : CBD 방법론 개발, EAI 수행 방법론 개발(삼성SDS용), IV&V 방법론 개발(삼성SDS용), Y2k 수행 방법론 개발(정부용) 등
ㆍ 강의 : Together 기반의 UML 모델링 실무(삼성멀티컴퍼스), 시간관리 등
ㆍ 기타 : 정통부 4대보험 정보연계 ISP, 디지털예산회계 BPR/ISP 컨설팅, 삼성그룹EP구축 ISP, 사가시(일본) 기간행정시스템 재구축 UML 모델링 컨설팅, Y2k(미국) 등

[주요 보유자격증]
ㆍ PMP : Project Management Professional Certificate by PMI (프로젝트 관리 전문가 자격증)
ㆍ CISA : Certified Information Systems Auditor Certificate by ISACA (국제 공인 정보시스템감사사 자격증)
ㆍ 그 밖에 정보처리기사(1급), 인증심사원 등의 자격증이 있습니다.

이 책을 통해, 생애 처음으로 C 언어를 배우는 여러분의 귀중한 시간을 아껴 드리겠습니다. 혼자 가지 말고 함께 갑시다. 여러분의 C 개발 경험은 달콤해질 수 있습니다.

이 상품의 총서

Klover리뷰 (0)

Klover리뷰 안내
Klover(Kyobo-lover)는 교보를 애용해 주시는 고객님들이 남겨주신 평점과 감상을 바탕으로, 다양한 정보를 전달하는 교보문고의 리뷰 서비스입니다.
1. 리워드 안내
구매 후 90일 이내에 평점 작성 시 e교환권 100원을 적립해 드립니다.
  • - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다.
  • - 리워드는 한 상품에 최초 1회만 제공됩니다.
  • - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
2. 운영 원칙 안내
Klover리뷰를 통한 리뷰를 작성해 주셔서 감사합니다. 자유로운 의사 표현의 공간인 만큼 타인에 대한 배려를 부탁합니다. 일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
  • 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
  • 도서와 무관한 내용의 리뷰
  • 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
  • 의성어나 의태어 등 내용의 의미가 없는 리뷰

구매 후 리뷰 작성 시, e교환권 100원 적립

문장수집

문장수집 안내
문장수집은 고객님들이 직접 선정한 책의 좋은 문장을 보여 주는 교보문고의 새로운 서비스 입니다. 교보eBook 앱에서 도서 열람 후 문장 하이라이트 하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다. 마음을 두드린 문장들을 기록하고 좋은 글귀들은 ‘좋아요’ 하여 모아보세요. 도서 문장과 무관한 내용 등록 시 별도 통보없이 삭제될 수 있습니다.
리워드 안내
  • 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
  • e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다.
  • 리워드는 한 상품에 최초 1회만 제공됩니다.
  • sam 이용권 구매 상품/오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.

구매 후 문장수집 작성 시, e교환권 100원 적립

    교보eBook 첫 방문을 환영 합니다!

    신규가입 혜택 지급이 완료 되었습니다.

    바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
    지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!

    교보e캐시 1,000원
    TOP
    신간 알림 안내
    C 개발 마스터클래스 시리즈 신간 알림이 신청되었습니다.
    신간 알림 안내
    C 개발 마스터클래스 시리즈 신간 알림이 취소되었습니다.
    리뷰작성
    • 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
    • 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
    • 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
    감성 태그

    가장 와 닿는 하나의 키워드를 선택해주세요.

    사진 첨부(선택) 0 / 5

    총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.

    신고/차단

    신고 사유를 선택해주세요.
    신고 내용은 이용약관 및 정책에 의해 처리됩니다.

    허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
    있으니 유의하시어 신중하게 신고해주세요.


    이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.

    문장수집 작성

    구매 후 90일 이내 작성 시, e교환권 100원 적립

    eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.

    P.
    C 개발 마스터클래스 2
    챗봇 등 6가지 프로젝트를 함께 만들어 봅시다.
    저자 모두보기
    저자(글)
    낭독자 모두보기
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 프리미엄 이용권입니다.
    선물하실 sam이용권을 선택하세요.
    결제완료
    e캐시 원 결제 계속 하시겠습니까?
    교보 e캐시 간편 결제
    sam 열람권 선물하기
    • 보유 권수 / 선물할 권수
      0권 / 1
    • 받는사람 이름
      받는사람 휴대전화
    • 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
    • 열람권은 1인당 1권씩 선물 가능합니다.
    • 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
    • 선물한 열람권의 등록유효기간은 14일 입니다.
      (상대방이 기한내에 등록하지 않을 경우 소멸됩니다.)
    • 무제한 이용권일 경우 열람권 선물이 불가합니다.
    이 상품의 총서 전체보기
    네이버 책을 통해서 교보eBook 첫 구매 시
    교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 네이버 책을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)
    구글북액션을 통해서 교보eBook
    첫 구매 시 교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 구글북액션을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)