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