제1부 다음 정차역은 - 자바(Java) 제1장 차세대 언어 - 자바 ... 27 자바란 무엇인가? ... 28 자바의 발전사 ... 30 인터넷과 월드 와이드 웹(WWW)의 간략한 역사 ... 34 인터넷의 초기 ... 34 웹의 초기 ... 35 프로그래밍 언어의 기초 ... 36 인터프리터 프로그래밍 언어 ... 37 컴파일러 프로그래밍 언어 ... 37 자바 : 중간 형태의 프로그래밍 언어 ... 38 C에서 C++로의 논리적인 발전 ... 39 C/C++에서 자바로의 거대한 발걸음 ... 41 자바 가상 기계(The Java Virtual Machine) ... 42 요약 ... 43 제2장 JDK로 시작해 보자 ... 44 자바 개발 환경 ... 45 자바 API와 기본 기능들 ... 46 JDK 도구들 ... 48 솔라리스 사용자를 위하여 ... 49 JDK 구하기 ... 50 JDK 설치하기 ... 51 설치가 잘 되었는지 테스트하기 ... 56 윈도우95/NT 사용자들을 위하여 ... 58 JDK를 구하기 ... 59 JDK를 설치하기 ... 60 설치가 잘 되었는지 테스트하기 ... 66 맥 OS 사용자들을 위하여 ... 68 JDK를 구하기 ... 69 JDK를 설치하기 ... 70 설치가 잘 되었는가 테스트하기 ... 71 또 하나의 선택 - MRJ ... 72 OS/2 사용자들을 위하여 ... 73 C/C++에서 자바로의 전환 ... 74 자바는 기계어 코드로 컴파일되지 않는다. ... 74 자바는 외부 C 프로그램을 사용하지 못한다. ... 74 자바에는 다중 상속(Multiple Inheritance)이 없다. ... 75 자바에서는 변수와 메소드, 클래스 이름을 마음대로 붙일 수 있다. ... 76 자바에는 포인터가 없다. ... 77 자바에는 따로 구분된 헤더 파일(header file)이 없다. ... 77 자바에는 단독으로 존재하는 함수가 없다. ... 78 어떤 자바 프로그램에는 main()까지도 없다. ... 78 자바에는 템플릿(template)이 없다. ... 79 자바에는 예외 처리가 있다. ... 79 자바에는 자동 쓰레기 수집 기능이 있다. ... 80 요약 ... 80 제2부 자바의 힘 맛보기 제3장 자바 브라우저와 월드 와이드 웹(WWW) : 기초 ... 83 웹을 돌아다니기 ... 83 URL을 사용하기 ... 85 URL은 어떻게 정의되는가 ... 86 URL의 형식 ... 86 자바가 가능한 브라우저를 가지고 웹 탐색을 하기 ... 88 핫자바(Hotjava) ... 89 넷스케이프 네비게이터(Netscape Navigator) ... 90 오라클 파워 브라우저(Oracle PowerBrowser) ... 91 인터넷 익스플로러(Internet Explorer) ... 92 리퀴드 리얼리티(Liquid Reality) ... 93 자바 개발자를 위한 중요한 웹 페이지들 ... 94 썬 사의 웹 사이트 ... 94 자바소프트(JavaSoft) ... 96 가멜란(Gamelan) ... 96 JARS ... 97 썬에서 만들지 않은 자바 도구들 ... 98 자바 개발자들을 위한 볼랜드 C++(Borland C++ for Java Developers) ... 98 시맨틱 카페(Symantec Caf$\acute{e}$) ... 99 로그 웨이브(Rogue Wave)의 JFactory ... 101 썬소프트(SunSoft)의 자바 워크샵(Java WorkShop) ... 101 웹에 있는 살아 있는 애플릿들로의 여행 ... 102 월스트리트 웹(WallStreetWeb) ... 102 쌜리브리티 페인터(Celebrity Painter) ... 103 3D 네트리스(Netris) ... 104 실리콘 그래픽스의 자바로 만든 홈페이지(SGI JavaPowerd Home Page) ... 104 스포츠존(SportsZone) ... 105 요약 ... 105 제4장 자바 언어 : 기초 ... 106 첫 번째 자바 프로그램을 만들기 ... 106 자바 프로그램의 기본 구조 - FirstApp ... 107 정리하기 ... 111 FirstApp를 만들기 ... 113 FirstApp를 컴파일하기 ... 115 FirstApp를 실행하기 ... 116 첫 번째 자바 애플릿 ... 117 자바 애플릿의 기본 구조 ... 118 애플릿을 생성하기 ... 121 FirstApplet을 컴파일하기 ... 122 애플릿을 위한 HTML 문서 만들기 ... 123 애플릿을 위한 그림 파일 만들기 ... 124 애플릿을 위한 사운드 파일 만들기 ... 125 FirstApplet을 실행하기 ... 125 문제점 해결 ... 126 컴파일러 에러 ... 127 인터프리터 에러 ... 132 뷰어 에러 ... 133 요약 ... 135 제5장 자바 도구와 JDK : 기초 ... 137 JDK 안에 있는 도구들 ... 137 JDK의 커맨드 라인 도구들 ... 138 자바 컴파일러와 관련 도구들 ... 139 자바 인터프리터 ... 155 자바 애플릿 뷰어 ... 164 요약 ... 170 제3부 자바 언어의 분석 제6장 자바 언어의 기본 ... 173 토큰(Token) ... 173 식별자(Identifier) ... 174 키워드(Keyword) ... 175 리터럴(Literal) ... 176 구분자(Separator) ... 180 연산자(Operator) ... 180 주석문(Comment) ... 182 토큰 요약(Tokens Summary) ... 183 데이터 타입을 사용하기 ... 183 기본 데이터 삽입(Primitive Data Type) ... 185 정수 데이터 삽입(Integer Data Type) ... 185 참조 데이터 삽입(Reference Data Type) ... 188 식(Expression) ... 192 식에서 연산자를 사용하기 ... 192 자바의 연산자 계산 순서 ... 194 선언문(Declaration) ... 198 정수형을 선언하기 ... 199 실수형을 선언하기 ... 200 문자형을 선언하기 ... 200 배열을 선언하기 ... 200 제어 흐름(Control Flow) ... 201 블록(Block)과 문장(Statement) ... 201 조건문(Conditional Expression) ... 202 순환문(Looping Expression) ... 206 요약 ... 214 제7장 객체 만들기 ... 215 클래스 소개 ... 216 클래스 ... 218 클래스의 변수 ... 231 클래스 메쏘드 ... 235 메쏘드 변경자(Method Modifier) ... 236 메쏘드의 보안과 접근 방식 선언하기 ... 236 메쏘드 오버로딩(Method Overloading) ... 239 객체 사용하기 ... 241 객체 생성과 삭제 ... 241 생성자 메쏘드 ... 244 패키지(package) ... 247 패키지 선언 ... 248 다른 패키지에 접근하기 ... 250 패키지 이름의 규칙 ... 251 CLASSPATH 환경 변수 ... 253 패키지 요약 ... 253 상속(Inheritance) ... 254 상속 선언 ... 255 상속 사용 ... 257 상속 요약 ... 258 인터페이스(Interfaces) ... 258 인터페이스 선언 ... 260 변경자 ... 261 인터페이스 사용 ... 263 요약 ... 265 제8장 지금까지의 것들을 전부 모아서 : 스레드(Thread), 예외(Exception), 그리고 더 ... 266 스레드 ... 267 스레드의 용도 ... 268 스레드 선언 ... 268 new와 스레드의 초기화 ... 272 스레드 제거 ... 272 스레드 메쏘드 ... 273 이름이 있는 스레드들 ... 275 스레드의 동기화(Synchronization) ... 276 스레드 요약 ... 277 예외 ... 278 자바 예외의 해석 ... 278 예외를 위한 키워드들 ... 279 try, catck, finally의 예 ... 280 예외 처리에서 try를 사용하기 ... 281 예외 처리에서 catch를 사용하기 ... 282 예외 처리에서 finally를 사용하기 ... 284 예외 처리에서 throw를 사용하기 ... 286 java.lang.Exception 클래스 ... 287 예외 요약 ... 289 스트림(stream) ... 290 자바 스트림을 통한 데이터의 흐름 ... 290 스트림의 중요성 ... 292 입력 스트림(input stream) ... 292 출력 스트림(output stream) ... 302 스트림 요약 ... 307 요약 ... 308 제4부 자바 응용 프로그래밍 인터페이스(API) 제9장 자바 API 소개 ... 311 자바 API 패키지 ... 311 API 패키지의 구조 ... 312 java.lang ... 313 java.util ... 315 java.io ... 315 java.net ... 317 java.awt ... 318 java.awt.image ... 319 java.awt.peer ... 320 java.applet ... 321 sun.tools.debug ... 322 자바 API 사용하기 ... 323 요약 ... 324 제10장 java.lang, java.applet 클래스 라이브러리 ... 325 java.applet.Applet 클래스 ... 325 java.lang 패키지와 클래스들 ... 340 Boolean ... 340 Character ... 341 Class ... 341 ClassLoader ... 342 Compiler ... 342 Number, Float, Double, Integer, Long ... 343 Math ... 344 Object ... 347 Process, Runtime, System ... 350 Security Manager ... 352 String ... 353 StringBuffer ... 354 Thread ... 354 ThreadGroup ... 354 Throwable ... 354 java.lang 예외 클래스들 ... 354 java.lang 예외 클래스의 예제 ... 356 요약 ... 357 제11장 AWT 클래스 라이브러리(java.awt) ... 358 AWT 소개 ... 358 Frame 클래스로 응용 프로그램 윈도우 만들기 ... 359 메뉴와 메뉴바 사용하기 ... 361 윈도우 사용 프로그램에서 이벤트 처리하기 ... 365 Dialog 클래스로 대화상자를 구현하기 ... 365 FileDialog 클래스로 로컬 파일 시스템에 접근하기 ... 368 Panel, Layout 클래스로 컴포넌트를 구성하기 ... 370 공통 GUI 컨트롤 사용하기 ... 377 레이블과 버튼 ... 377 체크박스와 라디오 버튼 ... 380 선택란과 리스트 ... 383 텍스트 필드와 텍스트 영역 ... 386 Canvas, Graphics 메쏘드로 그리기 ... 389 기하학적인 클래스들 ... 391 글꼴 쓰기 ... 394 이미지와 관련된 클래스 ... 396 스크롤바 사용하기 ... 399 Toolkit 클래스와 플랫폼별 윈도우 구현 ... 402 요약 ... 404 제12장 자바 입·출력/유틸리티 클래스 라이브러리(java.io/java.util) ... 405 java.io 패키지 소개 ... 405 java의 입·출력 스트림이 어떻게 움직이는가 ... 406 자바의 입력 스트림 ... 406 InputStream 클래스 ... 407 InputStream 클래스와 하위 클래스들에 대해 더 자세히 ... 408 ByteArrayInputStream 클래스 ... 416 FileInputStream 클래스 ... 416 SequenceInputStream 클래스 ... 416 StringBufferInputStream 클래스 ... 417 자바의 출력 스트림 ... 417 OutputStream 클래스 ... 418 기타 입·출력 클래스들 ... 425 java.util 패키지 ... 425 Bitset 클래스 ... 426 Date 클래스 ... 428 Dictionary 클래스 ... 433 Hashtable 클래스 ... 433 Properties 클래스 ... 433 Random 클래스 ... 434 Vector 클래스 ... 434 Stack 클래스 ... 434 StringTokenizer 클래스 ... 436 요약 ... 437 제13장 네트웍 프로그래밍을 위한 클래스 라이브러리(java.net) ... 438 네트웍 클래스 라이브러리 소개 ... 438 ContentHandler 클래스 ... 438 DatagramPacket 클래스 ... 439 DatagramSocket 클래스 ... 439 InetAddress 클래스 ... 439 자바 소켓 핸들러 ... 441 자바의 URL 관련 클래스들 ... 452 URL 클래스 ... 452 요약 ... 453 제5부 웹에서 쓰일 자바 애플릿 개발하기 제14장 자바 애플릿 만들기 ... 457 QuizMaker 애플릿의 개념화와 설계 ... 458 애플릿의 구조를 정의하기 ... 460 애플릿 만들기 ... 461 1단계 : 애플릿을 테스트할 HTML 문서를 만들기 ... 461 2단계 : 클래스를 포함하는 소스 코드 파일을 만들기 ... 462 3단계 : QuizMaker 클래스를 선언하기 ... 462 4단계 : 클래스에 변수를 추가하기 ... 463 5단계 : 메쏘드를 정의하기 ... 464 6단계 : 애플릿을 컴파일하기 ... 473 완성된 애플릿 ... 474 두 번째 애플릿을 만들기 ... 477 애플릿의 개념화와 설계 ... 477 애플릿 구조를 정의하기 ... 479 애플릿을 만들기 ... 480 완성된 애플릿 ... 490 테스트와 디버깅 ... 494 요약 ... 496 제15장 자바 애플릿으로 보강된 웹 문서 만들기 ... 497 HTML 문서의 기본 구조 ... 497 URL 이해 ... 498 HTML 태그의 소개 ... 499 HTML 문서의 머리말(Header) ... 500 HTML 문서의 본체(Body) ... 500 자바를 위한 확장 HTML 태그 ... 502 APPLET 태그 ... 503 APPLET 태그의 속성(Attribute)들 ... 506 PARAM 태그 ... 510 웹 문서에 애니메이션을 넣기 ... 515 Animator 애플릿 ... 515 Animator 애플릿에 파라미터를 사용하기 ... 517 Animator 애플릿과 함께 자바 애니메이션을 만들기 ... 518 애니메이션의 깜박임(flickering)을 줄이기 ... 519 웹 위에 자바가 들어가는 문서를 내놓기 ... 523 살아 있는 애플릿을 사용하기 ... 523 웹 문서 만들기 ... 525 웹 문서(홈페이지)를 웹에 올리기 ... 528 홈페이지 보기 ... 531 자바와 다른 제품들과의 비교 ... 532 자바 대 펄(Perl) ... 532 자바 대 다른 프로그래밍 언어들 ... 533 자바 대 많이 사용되는 소프트웨어들 ... 533 자바 대 HTML ... 534 요약 ... 535 제6부 자바 응용 프로그램 개발하기 제16장 응용 프로그램 만들기 ... 539 단독 실행 응용 프로그램과 애플릿의 차이 ... 540 코드에서의 차이점 ... 540 성능에서의 차이점 ... 541 보안에서의 차이점 ... 541 응용 프로그램의 개념화와 설계 ... 542 응용 프로그램의 구조 정의 ... 545 비그래픽 환경의 응용 프로그램 예제 ... 546 그래픽 환경의 응용 프로그램 예제 ... 547 응용 프로그램 만들기 ... 553 응용 프로그램에서 인터랙티브(interactive)한 갱신을 허용하기 ... 553 로컬 하드 디스크에 기록하기 ... 557 응용 프로그램 안에서 애플릿을 포함하기 ... 558 추가 요구 ... 561 완성된 응용 프로그램 ... 567 요약 ... 577 제17장 자바 프로그램을 실세계에서 사용하기 ... 578 크고, 빠르고, 좋은 프로그램들 ... 578 실세계 응용 프로그램의 개념화 ... 579 유용한 온라인 리소스 ... 580 요구 사항 결정 ... 580 실세계 응용 프로그램의 설계 ... 581 전체적인 설계와 배치 ... 581 메인 윈도우 설계 ... 583 메뉴바 설계 ... 583 SlidePanel 객체 설계 ... 585 SlideCanvas 객체 설계 ... 586 SlideText 객체 설계 ... 586 제어판 설계 ... 587 대화상자 설계 ... 587 파일 입·출력 ... 588 객체들 사이의 관계 ... 589 실세계 응용 프로그램의 구현 ... 590 메인 윈도우 만들기 ... 591 SlidePanel 클래스 추가 ... 598 SlideCanvas 클래스 추가 ... 600 SlideText 클래스 추가 ... 604 제어판 추가 ... 608 대화상자 추가 ... 609 완성된 작품 ... 615 테스트와 디버깅 ... 627 요약 ... 630 제18장 응용 프로그램 업그레이드 ... 631 소프트웨어 개발 사이클 ... 631 개발작업 ... 631 유지 보수 작업 ... 632 수정에 필요한 제안들 ... 633 응용 프로그램 업그레이드의 개념화 ... 635 슬라이드 저작 및 저장 기능 ... 636 체크박스의 상태 바꾸기 ... 636 여러 개의 파일 읽기 ... 636 연속 재생 ... 637 읽을 수 있는 슬라이드 수를 늘리기 ... 637 최종 작업 리스트 ... 638 응용 프로그램 업그레이드 - 설계 ... 638 슬라이드 저작 및 저장 기능 ... 638 종합 ... 644 응용 프로그램 업그레이드 - 구현 ... 646 SlideCanvas 클래스 ... 646 SlideText 클래스 ... 657 SlidePanel 클래스 ... 667 ShowControls 클래스 ... 674 SildeShow 클래스 ... 681 테스트와 디버깅 ... 697 슬라이드 저작 및 저장 기능 ... 698 체크박스 ... 699 여러 개의 파일 읽기 ... 700 연속 재생 기능 ... 700 읽을 수 있는 슬라이드 수를 늘리기 ... 701 요약 ... 701 제7부 복잡한 이슈들 제19장 수준높은 애플릿을 설계하고 구현하기 ... 705 프로젝트 개발과 계획 ... 705 요구 사항 단계(Requirement Phase) ... 706 명세/분석 단계(Specification/Analysis Phase) ... 707 계획 단계(Planning Phase) ... 711 프로젝트 설계 ... 711 구현 단계(Implementation Phase) ... 715 SpreadSheet 애플릿에 사용되는 객체들을 저장할 공간 ... 715 기본 프레임의 초기화 ... 717 애플릿의 상태를 결정하는 메쏘드 ... 724 애플릿 스레드 실행 ... 725 프레임 화면 표시 ... 727 프레임 화면 표시의 갱신 ... 729 애플릿에 발생하는 이벤트들의 처리 ... 731 현재 셀값의 갱신 ... 734 수식 처리 ... 735 셀 생성 ... 738 셀의 화면 표시 준비 ... 739 유틸리티 메쏘드 ... 741 수식 파싱 ... 742 셀 화면 표시 ... 747 노드 객체 만들기 ... 749 입력 영역 만들기 ... 750 완성된 애플릿 ... 755 SpreadSheet 애플릿을 사용하기 ... 777 요약 ... 779 제20장 수준 높은 응용 프로그램 설계와 구현 ... 780 프로젝트 개발과 계획 수립 ... 780 요구 사항 결정 ... 782 필요한 객체들의 정의 ... 784 프로젝트의 완성 단계까지를 구성하기 ... 786 프로젝트 설계 ... 786 프로젝트 구현 ... 791 객체들이 들어갈 저장 공간 ... 792 메인 윈도우 만들기 ... 794 메뉴바와 풀다운 메뉴를 추가시키기 ... 796 선택 메뉴를 추가하기 ... 798 텍스트 영역 추가하기 ... 800 File 객체 추가하기 ... 801 움직일 수 있게 바퀴를 달기 ... 801 이벤트 처리하기 ... 802 유틸리티 메쏘드들을 만들기 ... 805 파일 입·출력 처리하기 ... 808 대화상자 표시하기 ... 811 대화상자 만들기 ... 813 텍스트 처리 메쏘드 ... 825 프로젝트의 완성 ... 827 요약 ... 847 제21장 네이티브 프로그램과 라이브러리와의 연계 ... 848 왜, 그리고 언제 자바 프로그램에서 네이티브(Native) 메쏘드를 사용해야 하는가? ... 848 C 프로그램을 사용하기 ... 850 자바 프로그램에서 사용할 C 프로그램을 새로 만들기 ... 850 이미 있는 C 프로그램을 사용하기 ... 856 자바 네이티브 인터페이스(JNI) 프로그래밍 ... 857 요약 ... 861 제22장 디버깅과 문제 해결 ... 862 자바 디버거 시작하기 ... 862 디버거를 직접 실행하기 ... 863 디버거를 현재 인터프리터 세션에 연계해서 사용하기 ... 864 디버거를 애플릿 뷰어 세션에 연계해서 사용하기 ... 865 디버거를 사용하여 코드의 문제를 찾아내기 ... 866 스레드와 검사 ... 867 메쏘드와 클래스 검사 ... 870 인터턴스 변수 검사 ... 877 소스 코드의 문제점을 발견하기 ... 880 요약 ... 886 제23장 자바 가상 기계(Java Virtual Machine) ... 887 가상 기계 소개 ... 887 자바 가상 기계의 기본 부분 ... 888 레지스터(Registers) ... 888 스택(Stack) ... 889 실행 환경(Execution Environment) ... 890 쓰레기 수집 히프(Garbage-Collected Heap) ... 890 상수 풀(Constant Pool) ... 891 메쏘드 영역(Method Area) ... 892 바이트 코드 명령어 셋 ... 892 바이트 코드 고찰 ... 893 명령어 셋 일람 ... 899 스택에 상수를 쌓는 명령어 ... 901 스택에 로컬 변수를 읽어들이는 명령어 ... 905 스택값을 로컬 변수에 저장하는 명령어 ... 908 배열을 관리하는 명령어들 ... 912 스택 제어 명령어 ... 920 산술 연산을 수행하는 명령어 ... 923 논리 연산을 수행하는 명령어 ... 933 변환 연산 명령어 ... 938 제어 흐름 관련 명령어 ... 943 메쏘드 리턴 ... 953 점프 테이블 관련 명령어 ... 955 객체 필드 관리 명령어 ... 957 메쏘드 호출 ... 960 예외 처리 ... 963 기타 객체 연산 ... 964 모니터(Monitors) ... 965 클래스 파일 포맷 분석 ... 966 시그내쳐 ... 969 요약 ... 970 제8부 부록 부록 A 자바 API 표 ... 973 부록 B 자바 단어집 ... 978 찾아보기 ... 989