목차
1. 컴퓨터, 인터넷, 월드 와이드 웹 ... 1
   1.1 소개 ... 2
   1.2 컴퓨터란 무엇인가? ... 4
   1.3 컴퓨터 구조 ... 4
   1.4 운영체제의 발전 ... 5
   1.5 개인용 컴퓨팅, 분산 컴퓨팅, 클라이언트/서버 컴퓨팅 ... 6
   1.6 기계어, 어셈블리어, 고급 언어 ... 7
   1.7 C의 역사 ... 8
   1.8 C 표준 라이브러리 ... 9
   1.9 소프트웨어 경향의 중요한 요소 : 객체 기술 ... 10
   1.10 C++와 C++ How to Program ... 12
   1.11 Java와 Java How to Program ... 12
   1.12 기타 고급 언어 ... 13
   1.13 구조적 프로그래밍 ... 13
   1.14 일반적인 C 프로그램 개발 환경의 기초 ... 14
   1.15 하드웨어 경향 ... 17
   1.16 인터넷의 역사 ... 17
   1.17 월드 와이드 웹의 역사 ... 18
   1.18 C와 이 책에 관한 일반적인 주의 사항 ... 19
2. C 프로그래밍 소개 ... 27
   2.1 소개 ... 28
   2.2 간단한 C 프로그램 : 한 라인에 텍스트 출력하기 ... 28
   2.3 다른 간단한 C 프로그램 : 두 정수를 더하기 ... 32
   2.4 메모리의 개념 ... 37
   2.5 C에서 산술 ... 38
   2.6 선택문 : 등위 연산자와 관계 연산자 ... 41
3. C에서 구조적 프로그램 개발 ... 57
   3.1 소개 ... 58
   3.2 알고리즘 ... 58
   3.3 의사코드 ... 59
   3.4 제어 구조 ... 59
   3.5 if 선택 구조 ... 61
   3.6 if/else 선택 구조 ... 63
   3.7 while 반복 구조 ... 67
   3.8 알고리즘 형식화 : 사례연구 1(변환 지정자) ... 68
   3.9 top-down, stepwise refinement를 이용한 알고리즘 형식화 : 사례연구 2(감시 제어 반복) ... 70
   3.10 top-down, stepwise refinement를 이용한 공식 알고리즘 : 사례연구 3(중첩 제어 구조) ... 76
   3.11 할당 연산자 ... 80
   3.12 증가, 감소 연산자 ... 81
4. C 프로그램 제어 ... 101
   4.1 소개 ... 102
   4.2 반복의 기본사항 ... 102
   4.3 카운터 제어 반복 ... 103
   4.4 for 반복 구조 ... 105
   4.5 for 구조 : 주의와 관찰 ... 107
   4.6 for 구조를 사용한 예 ... 108
   4.7 switch 다중-선택 구조 ... 111
   4.8 do/while 반복 구조 ... 117
   4.9 break, continue 문장 ... 118
   4.10 논리 연산자 ... 120
   4.11 등위, 할당 연산자의 혼동 ... 123
   4.12 구조적 프로그래밍 요약 ... 124
5. C 함수 ... 142
   5.1 소개 ... 143
   5.2 C 프로그램 모듈 ... 143
   5.3 수학 라이브러리 함수 ... 144
   5.4 함수 ... 146
   5.5 함수의 정의 ... 146
   5.6 함수의 원형 ... 150
   5.7 헤더파일 ... 153
   5.8 함수 호출 : 값에 의한 호출과 참조에 의한 호출 ... 154
   5.9 임의의 수 생성 ... 154
   5.10 예제 : A Game of Chance ... 159
   5.11 기억 클래스(또는 기억장소 종류) ... 161
   5.12 범위 규칙 ... 163
   5.13 재귀 ... 166
   5.14 재귀 사용의 예 : 피보나치 수열 ... 169
   5.15 재귀와 반복 ... 172
6. C 배열 ... 195
   6.1 소개 ... 196
   6.2 배열 ... 196
   6.3 배열 정의 ... 198
   6.4 배열 사용 예 ... 198
   6.5 함수로 배열 전달 ... 210
   6.6 배열 정렬 ... 214
   6.7 배열을 사용하여 평균, 중간값, 최빈수 계산 ... 215
   6.8 배열 탐색 ... 219
   6.9 다차원 배열 ... 223
7. C 포인터 ... 245
   7.1 소개 ... 246
   7.2 포인터 변수 선언과 초기화 ... 246
   7.3 포인터 연산자 ... 247
   7.4 참조에 의한 함수 호출 ... 250
   7.5 포인터와 한정자 const의 사용 ... 253
   7.6 참조에 의한 호출을 사용하는 버블정렬 ... 259
   7.7 포인터 표현과 포인터 계산 ... 265
   7.8 포인터와 배열 사이의 관계 ... 267
   7.9 포인터의 배열 ... 271
   7.10 사례연구 : 카드 혼합과 분배 시뮬레이션 ... 272
   7.11 함수 포인터 ... 276
8. C 문자와 문자열 ... 302
   8.1 소개 ... 303
   8.2 문자열과 문자의 기초 ... 303
   8.3 문자 처리 라이브러리 ... 305
   8.4 문자열 변환 함수 ... 310
   8.5 표준 입/출력 라이브러리 함수 ... 314
   8.6 문자열 처리 라이브러리의 문자열 조작 함수 ... 318
   8.7 문자열 처리 라이브러리의 함수 비교 ... 320
   8.8 문자열 처리 라이브러리의 검색 함수 ... 322
   8.9 문자열 처리 라이브러리의 메모리 함수 ... 328
   8.10 문자열 조작 라이브러리의 다른 함수들 ... 332
9. C 입/출력 ... 347
   9.1 소개 ... 348
   9.2 스트림 ... 348
   9.3 printf의 출력 형식 ... 348
   9.4 정수 출력 ... 349
   9.5 부동소수 출력 ... 351
   9.6 문자열, 문자 출력 ... 352
   9.7 다른 변환 지정자 ... 353
   9.8 필드 너비와 정밀도 출력 ... 355
   9.9 printf 형식 제어 문자열에서 부호 사용 ... 357
   9.10 리터럴과 Escape Sequence 출력 ... 360
   9.11 scantf의 입력 형식 ... 360
10. C 구조체, 공용체, 비트 처리, 열거형 ... 374
   10.1 소개 ... 375
   10.2 구조체 정의 ... 375
   10.3 구조체 초기화 ... 378
   10.4 구조체 멤버 접근 ... 378
   10.5 함수에서의 구조체 사용 ... 380
   10.6 typedef ... 380
   10.7 예제 : 보다 효과적으로 카드를 섞고 나누어주는 프로그램 ... 381
   10.8 공용체 ... 383
   10.9 비트 단위 계산 ... 386
   10.10 비트 필드 ... 394
   10.11 열거형 ... 397
11. C 파일 처리 ... 408
   11.1 소개 ... 409
   11.2 데이터 계층 ... 409
   11.3 파일과 스트림 ... 411
   11.4 순차 접근 파일 생성하기 ... 412
   11.5 순차 접근 파일에서 데이터 읽어들이기 ... 417
   11.6 임의 접근 파일 ... 422
   11.7 임의 접근 파일 생성하기 ... 423
   11.8 임의 접근 파일에 데이터를 임의로 기록하기 ... 425
   11.9 임의 접근 파일로부터 데이터를 임의로 읽어오기 ... 427
   11.10 사례연구 : 트랜잭션 처리 시스템 ... 429
12. C 자료 구조 ... 444
   12.1 소개 ... 445
   12.2 자기 참조 구조체 ... 446
   12.3 동적 메모리 할당 ... 446
   12.4 연결 리스트 ... 447
   12.5 스택 ... 455
   12.6 큐 ... 461
   12.7 트리 ... 467
13. C 전처리기 ... 496
   13.1 소개 ... 497
   13.2 include 전처리기 지시어 ... 497
   13.3 define 전처리기 지시어 : 심볼릭 상수 ... 497
   13.4 define 전처리기 지시어 : 매크로 ... 498
   13.5 조건부 컴파일 ... 500
   13.6 error와 pragma 전처리기 지시어 ... 501
   13.7 와 연산자 ... 501
   13.8 라인 번호 ... 502
   13.9 미리 정의된 심볼릭 상수 ... 502
   13.10 가정(assertion) ... 502
14. C 고급 문제 ... 508
   14.1 소개 ... 509
   14.2 UNIX와 DOS 시스템에서의 입/출력 방향지정 ... 509
   14.3 변수 길이 인자 리스트 ... 510
   14.4 커맨드 라인 인자 ... 512
   14.5 복잡한 원본파일 프로그램 컴파일시 주의할 점 ... 513
   14.6 exit와 atexit를 가진 프로그램 종료 ... 515
   14.7 volatile 형식 한정자 ... 517
   14.8 정수와 부동소수점 상수 ... 517
   14.9 파일에 대해서 ... 517
   14.10 신호 처리 ... 519
   14.11 동적 메모리 할당 : calloc과 realloc 함수 ... 522
   14.12 조건 없는 분기 : goto ... 522
15. C++ 소개 ... 530
   15.1 소개 ... 531
   15.2 C++ ... 531
   15.3 간단한 프로그램 : 두 개의 정수 합 ... 532
   15.4 C++ 표준 라이브러리 ... 534
   15.5 헤더파일 ... 535
   15.6 확장 함수 ... 537
   15.7 참조와 참조 파라미터 ... 539
   15.8 디폴트 인자와 비어있는 파라미터 리스트 ... 543
   15.9 단항 범위 연산자 ... 545
   15.10 함수 오버로딩 ... 547
   15.11 함수 템플릿 ... 548
16. C++ 클래스와 데이터 추상화 ... 557
   16.1 소개 ... 558
   16.2 Time 추상 데이터 형식(클래스) 구현 ... 559
   16.3 클래스 범위와 클래스 멤버 접근 ... 565
   16.4 구현으로부터 인터페이스 분리 ... 567
   16.5 멤버 접근 제어 ... 570
   16.6 접근 함수들과 유용한 함수들 ... 573
   16.7 클래스 객체 초기화 : 생성자 ... 576
   16.8 생성자를 가진 디폴트 인자 사용 ... 577
   16.9 소멸자 사용 ... 581
   16.10 생성자와 소멸자가 호출되었을 때 ... 581
   16.11 데이터 멤버와 멤버 함수 사용 ... 584
   16.12 Private 데이터 멤버 참조 리턴 ... 589
   16.13 디폴트 멤버와이즈 복사에 의한 할당 ... 591
   16.14 소프트웨어 재사용성 ... 593
17. C++ 클래스 : 2부 ... 602
   17.1 소개 ... 603
   17.2 const(상수) 객체와 const 멤버 함수 ... 603
   17.3 합성 : 클래스 멤버로서의 객체 ... 611
   17.4 friend 함수와 friend 클래스 ... 617
   17.5 this 포인터 사용하기 ... 620
   17.6 new와 delete 연산자의 동적 메모리 할당 ... 625
   17.7 static 클래스 멤버 ... 627
   17.8 데이터 추상화와 정보 은닉 ... 632
      17.8.1 예제 : 배열 추상 데이터 형식 ... 634
      17.8.2 예제 : 문자열 추상 데이터 형식 ... 635
      17.8.3 예제 : 대기 행렬 추상 데이터 형식 ... 635
   17.9 container 클래스와 반복 적용 ... 635
18. C++ 연산자 오버로딩 ... 643
   18.1 소개 ... 644
   18.2 연산자 오버로딩의 기초 ... 644
   18.3 연산자 오버로딩의 제한 ... 646
   18.4 클래스 멤버 대 friend 함수로서의 연산자 함수 ... 648
   18.5 오버로딩 스트림 삽입과 스트림 추출 연산자 ... 649
   18.6 오버로딩 단일 연산자 ... 652
   18.7 오버로딩 이진 연산자 ... 652
   18.8 사례연구 : 배열 클래스 ... 653
   18.9 형식 사이에서의 변환하기 ... 665
   18.10 ++와 -- 오버로딩 ... 666
19. C++ 상속성 ... 676
   19.1 소개 ... 677
   19.2 상속성 : 기저 클래스와 파생 클래스 ... 679
   19.3 protected 멤버 ... 681
   19.4 기저 클래스 포인터를 파생 클래스 포인터로 캐스팅하기 ... 681
   19.5 멤버 함수들 사용하기 ... 687
   19.6 파생 클래스에 기저 클래스 멤버들 재정의하기 ... 687
   19.7 Public, Protected와 Private 상속 ... 691
   19.8 직접 기저 클래스들과 간접 기저 클래스들 ... 692
   19.9 파생 클래스들에서 생성자와 소멸자 사용하기 ... 692
   19.10 파생 클래스 객체를 기저 클래스 객체 전환으로 암시화하기 ... 696
   19.11 상속성을 가진 소프트웨어 공학 ... 697
   19.12 합성 대 상속 ... 699
   19.13 '사용한다(Uses A)'와 '안다(Knows A)' 관계 ... 699
   19.14 사례연구 : Point, Cycle, Cylinder ... 700
20. C++ 가상 함수들과 다형성 ... 714
   20.1 소개 ... 715
   20.2 형식 필드와 switch 구문 ... 715
   20.3 가상 함수들 ... 716
   20.4 추상 기저 클래스들과 유형 클래스들 ... 716
   20.5 다형성 ... 717
   20.6 새 클래스들과 동적 바인딩 ... 720
   20.7 가상 소멸자들 ... 720
   20.8 사례연구 : 인터페이스와 구현 상속 ... 720
   20.9 다형성, 가상 함수들과 동적 바인딩 'under the hood' ... 729
21. C++ 스트림 입/출력 ... 737
   21.1 소개 ... 738
   21.2 스트림 ... 739
      21.2.1 Iostream 라이브러리 헤더파일 ... 740
      21.2.2 스트림 입/출력 클래스와 객체 ... 740
   21.3 스트림 입력 ... 742
      21.3.1 스트림 삽입 연산자 ... 742
      21.3.2 종속 접속한 스트림 삽입/추출 연산자 ... 744
      21.3.3 char* 변수 출력 ... 745
      21.3.4 멤버 함수 put으로 문자 출력 : 종속 접속한 puts ... 745
   21.4 스트림 입력 ... 746
      21.4.1 스트림 추출 연산자 ... 746
      21.4.2 get 및 getline 멤버 함수 ... 748
      21.4.3 istream 멤버 함수 peek, putback, ignore ... 751
      21.4.4 안전한 형식 I/O ... 751
   21.5 read, gcount 및 write를 포함한 형식화되지 않은 I/O ... 751
   21.6 스트림 처리기 ... 752
      21.6.1 정수 스트림 기수 : dec, oct, hex, setbase ... 753
      21.6.2 부동 소수점 정밀도 ... 754
      21.6.3 필드 너비(setw, width) ... 755
      21.6.4 사용자 정의 처리기 ... 756
   21.7 스트림 형식 상태 ... 757
      21.7.1 형식 상태 플래그 ... 757
      21.7.2 후위 0 및 10진 소수점(ios::showpoint) ... 758
      21.7.3 정렬(ios::left, ios::right, ios::internal) ... 759
      21.7.4 채워 넣기(fill, setfill) ... 761
      21.7.5 정수 스트림 기수(ios::dec, ios::oct, ios::hex, ios::showbase) ... 763
      21.7.6 부동 소수점 숫자, 과학적 표기법(ios::scientific, ios::fixed) ... 763
      21.7.7 대/소문자 제어(ios::uppercase) ... 764
      21.7.8 형식 플래그 설정 및 재설정하기 ... 765
   21.8 스트림 오류 상태 ... 767
   21.9 입력 스트림에 출력 스트림 연결하기 ... 769
22. C++ 템플릿 ... 782
   22.1 소개 ... 783
   22.2 클래스 템플릿 ... 783
   22.3 클래스 템플릿과 형식이 없는 파라미터 ... 789
   22.4 템플릿 상속성 ... 790
   22.5 템플릿과 friend ... 790
   22.6 템플릿과 static 멤버들 ... 791
23. C++ 예외 처리하기 ... 795
   23.1 소개 ... 796
   23.2 예외 처리하기가 꼭 필요한 경우 ... 798
   23.3 다른 오류 처리 방법 ... 799
   23.4 C++ 예외 처리하기의 기본 : try, throw, catch ... 799
   23.5 간단한 예외 처리 프로그램 : 0으로 나누기 ... 800
   23.6 예외 발생 ... 802
   23.7 예외 잡기 ... 803
   23.8 예외를 다시 발생 ... 806
   23.9 예외 명세서 ... 808
   23.10 예상하지 못한 예외 처리하기 ... 808
   23.11 스택 풀기 ... 809
   23.12 생성자, 소멸자 그리고 예외 처리하기 ... 810
   23.13 예외와 상속 ... 811
   23.14 new 실패 처리 ... 811
   23.15 클래스 auto_ptr(자동 포인터)과 동적 메모리 할당 ... 815
   23.16 표준 라이브러리 예외 계층 ... 816
24. Java 애플리케이션과 애플릿 소개 ... 827
   24.1 소개 ... 828
   24.2 Java 환경 ... 828
   24.3 Java와 이 책에 대해 ... 831
   24.4 간단한 프로그램 : 텍스트 출력하기 ... 832
   24.5 또 다른 Java 프로그램 : 정수 합 구하기 ... 839
   24.6 Java 2 Software Development Kit(J2SDK) 애플릿 ... 843
      24.6.1 TicTaeToe 애플릿 ... 844
      24.6.2 DravTest 애플릿 ... 846
      24.6.3 Java2D 애플릿 ... 847
   24.7 간단한 Java 애플릿 : 문자열 그리기 ... 848
   24.8 2가지 다른 애플릿 : 문자열 그리기와 선긋기 ... 854
   24.9 또 다른 Java 애플릿 : 정수 합 구하기 ... 855
25. Java에서 연산자와 메소드 그리고 배열 ... 873
   25.1 소개 ... 874
   25.2 원시 데이터 형식과 키워드 ... 874
   25.3 논리 연산자 ... 876
   25.4 메소드 정의 ... 880
   25.5 Java API 패키지 ... 884
   25.6 임의의 숫자 생성 ... 886
   25.7 예제 : 주사위 놀이 ... 889
   25.8 JApplet 클래스 메소드 ... 897
   25.9 배열 정의와 할당 ... 898
   25.10 배열 사용 예제 ... 899
   25.11 참조와 참조 파라미터 ... 907
   25.12 여러 행으로 구성된 배열 ... 908
26. Java 객체기반 프로그래밍 ... 920
   26.1 소개 ... 921
   26.2 클래스의 추상 데이터 형식 구현 ... 922
   26.3 클래스 유효 범위 ... 928
   26.4 패키지 생성 ... 928
   26.5 클래스 객체의 초기화 : 생성자 ... 932
   26.6 set과 get 메소드 ... 932
   26.7 this 참조 사용 ... 938
   26.8 종결자 ... 940
   26.9 Static 클래스 멤버 ... 941
27. Java 객체지향 프로그래밍 ... 952
   27.1 소개 ... 953
   27.2 슈퍼 클래스와 서브 클래스 ... 954
   27.3 protected 멤버 ... 956
   27.4 슈퍼 클래스와 서브 클래스 사이의 관계 ... 956
   27.5 암시적으로 서브 클래스를 슈퍼 클래스로 변환하기 ... 963
   27.6 소프트웨어 공학에서 상속 개념 ... 963
   27.7 합성과 상속 ... 964
   27.8 다형성 ... 964
   27.9 필드 형식과 switch 문장 ... 965
   27.10 동적 메소드 바인딩 ... 965
   27.11 final 메소드와 클래스 ... 965
   27.12 추상 슈퍼 클래스와 유형의 클래스 ... 966
   27.13 다형성 예 ... 967
   27.14 새로운 클래스와 동적 바인딩 ... 967
   27.15 인터페이스 상속과 구현 예제 ... 968
   27.16 인터페이스 생성과 사용 예제 ... 973
   27.17 내부 클래스 정의 ... 978
   27.18 내부 클래스 정의 ... 988
   27.19 윈시 데이터 형식의 랩퍼방법 클래스 ... 988
28. Java 그래픽과 Java2D ... 996
   28.1 소개 ... 997
   28.2 그래픽 문맥과 그래픽 객체 ... 999
   28.3 컬러 ... 1000
   28.4 폰트 관련 ... 1007
   28.5 선, 사각형 그리고 타원 그리기 ... 1012
   28.6 원호 ... 1015
   28.7 다각형과 멀티선 그리기 ... 1018
   28.8 Java2D API ... 1020
   28.9 Java2D 모양들 ... 1021
29. Java 그래픽 사용자 인터페이스 컴포넌트 ... 1035
   29.1 소개 ... 1036
   29.2 스윙 개요 ... 1037
   29.3 JLabel ... 1039
   29.4 이벤트 처리 모델 ... 1042
   29.5 JTextField와 JPasswordField ... 1042
      29.5.1 이벤트 처리가 동작하는 방법 ... 1049
   29.6 JTextArea ... 1050
   29.7 JButton ... 1053
   29.8 JCheckBox ... 1056
   29.9 JComboBox ... 1059
   29.10 마우스 이벤트 처리 ... 1062
   29.11 배치 관리자 ... 1065
      29.11.1 FlowLayout ... 1066
      29.11.2 BorderLayout ... 1068
      29.11.3 GridLayout ... 1071
   29.12 패널 ... 1073
   29.13 JPanel 자신이 포함된 서브 클래스 생성 ... 1075
   29.14 윈도우 ... 1080
   29.15 프레임에 메뉴 사용하기 ... 1082
30. Java 멀티미디어 : 이미지, 애니메이션 그리고 오디오 ... 1102
   30.1 소개 ... 1103
   30.2 로딩, 출력 그리고 이미지의 크기 변화 ... 1104
   30.3 오디오 클립 로딩과 실행 ... 1106
   30.4 애니메이션 ... 1109
   30.5 애니메이션에서의 문제점 ... 1113
   30.6 HTML param 태그를 사용한 애플릿의 최적화 ... 1115
   30.7 이미지 맵 ... 1119
   30.8 Java 플러그-인 ... 1121
   30.9 인터넷과 www 자원 ... 1122
A. 인터넷과 웹 주소록 ... 1127
   A.1 C/C++ 주소 ... 1127
   A.2 C++ 튜토리얼 ... 1128
   A.3 C/C++ FAQs ... 1129
   A.4 Visual C++ ... 1130
   A.5 comp.lang.c++ ... 1130
   A.6 C/C++ 컴파일러 ... 1132
   A.7 C++ 개발 툴 ... 1134
   A.8 Java Resources ... 1134
   A.9 Java 제품 ... 1136
   A.10 Java FAQs ... 1136
   A.11 Java 튜토리얼 ... 1137
   A.12 Java 관련 잡지 ... 1137
   A.13 Java Applets ... 1138
   A.14 멀티미디어 ... 1139
   A.15 Java 뉴스 그룹 ... 1139
B. C99 인터넷과 웹 주소록 ... 1141
   B.1 C99 주소 ... 1141
C. 연산자 우선순위 표 ... 1144
D. ASCII 문자 세트 ... 1150
E. 수 체계 ... 1151
   E.1 소개 ... 1152
   E.2 2진수를 8진수와 16진수로 만들기 ... 1154
   E.3 8진수와 16진수를 2진수로 변환하기 ... 1155
   E.4 2진수, 8진수, 16진수를 10진수로 변환 ... 1156
   E.5 10진수를 2진수, 8진수, 16진수로 변환 ... 1156
   E.6 음의 2진수 : 2의 보수 표기법 ... 1158
찾아보기 ... 1163
닫기