역자 서문 ... 6 서문 ... 21 1장. 컴파일, 실행, 디버깅 기본을 세우자 ... 39 01. 자바 컴파일과 실행 : JDK ... 40 02. 컬러 하이라이팅 에디터를 이용한 편집과 컴파일 ... 45 03. IDE를 이용한 컴파일, 실행, 테스트 ... 46 04. 이 책에서 클래스 사용하기 ... 51 05. jr을 이용한 자동 컴파일 ... 52 06. make를 이용한 자동 컴파일 ... 53 07. Ant를 이용한 자동 컴파일 ... 55 08. 애플릿 실행 ... 58 09. 디프리케이션 경고 처리 ... 60 10. ifdef가 없는 조건적인 디버깅 ... 63 11. 출력의 디버깅 ... 65 12. 디버거 이용 ... 66 13. 단위 테스트 ... 69 14. 자바 클래스 파일 디컴파일하기 ... 72 15. 다른 사람이 자신의 클래스를 디컴파일하지 못하게 하기 ... 75 16. 판독 가능한 역추적 구하기 ... 76 17. 더 많은 자바 소스 찾기 ... 78 18. 프로그램 : 디버그 ... 80 2장. 자바 환경 다루기 모든 것은 환경의 지배를 받는다 ... 81 01. 환경 변수 얻기 ... 82 02. 시스템 속성 ... 84 03. JDK 배포판에 의존적인 코드 작성 ... 86 04. 운영체제에 의존적인 코드 작성 ... 88 05. 효율적인 CLASSPATH 사용 ... 90 06. 확장 API 혹은 패키지 API 사용 ... 94 07. 명령행 인자 파싱 ... 95 3장. 문자열 문자열 가지고 놀기 ... 101 01. 문자열을 서브 문자열로 분해하기 ... 104 02. StringTokenizer를 이용한 문자열 분해 ... 105 03. String과 StringBuffer ... 109 04. 한 번에 한 문자씩 문자열 처리하기 ... 110 05. 문자열 정렬 ... 112 06. 유니코드 문자와 문자열 사이의 변환 ... 115 07. 단어나 문자를 이용하는 문자열 뒤집기 ... 117 08. 탭의 확장과 압축 ... 118 09. 대소문자의 제어 ... 123 10. 들여쓰기한 텍스트 문서 ... 125 11. 출력 불가능한 문자 입력 ... 127 12. 문자열 끝에 있는 공백 제거하기 ... 129 13. 쉼표로 분리된 데이터 파싱 ... 130 14. 프로그램 : 간단한 텍스트 포맷터 ... 136 15. 프로그램 : Soundex 이름 비교 ... 138 4장. 정규 표현식으로 패턴 매칭하기 패턴은 이럴 때 쓴다 ... 143 01. 정규 표현식 ... 146 02. RE를 어떻게 사용하는가? ... 149 03. 자바에서 정규 표현식 사용하기 ... 151 04. 대화식 RE 테스트 ... 153 05. 일치하는 텍스트 찾기 ... 154 06. 일치하는 텍스트 바꾸기 ... 156 07. 나타나는 모든 패턴 출력 ... 157 08. 패턴을 포함하는 행 출력 ... 160 09. match()와 subst()에서 대소문자 제어하기 ... 162 10. RE 미리 컴파일하기 ... 163 11. 텍스트에서 새로운 행과 일치시키기 ... 164 12. 프로그램 : 데이터 마이닝 ... 166 13. 프로그램 : 전체 Grep ... 169 5장. 숫자형 숫자형의 변신 ... 175 01. 문자열이 유효한 수인지 확인하기 ... 178 02. 큰 숫자형을 작은 숫자형에 저장하기 ... 180 03. 부동 소수점형을 이용하지 않고 정수형 소수 구하기 ... 181 04. 부동 소수점형의 정확도 구하기 ... 183 05. 부동 소수점형 비교하기 ... 185 06. 부동 소수점형 수의 라운딩 ... 188 07. 수 포맷팅 ... 189 08. 2진수, 8진수, 10진수, 16진수 사이의 변환 ... 192 09. 정수형 연산 ... 193 10. 로마숫자를 이용한 작업 ... 195 11. 정확한 복수형 포맷팅 ... 200 12. 난수의 생성 ... 202 13. 더 좋은 난수의 생성 ... 203 14. 삼각 함수 계산 ... 205 15. 로그 구하기 ... 206 16. 행렬의 곱셈 ... 207 17. 복소수의 이용 ... 209 18. 매우 큰 숫자형 다루기 ... 211 19. 프로그램 : TempConverter ... 214 20. 프로그램 : 숫자형 회문 ... 218 6장. 날짜와 시간 시간은 관리할 때 가치가 있다 ... 223 01. 오늘 날짜 찾기 ... 225 02. 특정 포맷으로 날짜와 시간 출력하기 ... 226 03. 다른 포맷으로 날짜 표시하기 ... 229 04. YMDHMS를 Calendar나 기원후 시간으로 변환하기 ... 229 05. 문자열을 날짜로 파싱하기 ... 230 06. 기원후 시간을 DMYHMS로 변환하기 ... 233 07. Date나 Calendar에서 더하거나 빼기 ... 234 08. 두 날짜 차 ... 236 09. 날짜 비교 ... 237 10. 주/월/년 중 몇 번째 날 혹은 몇 번째 주인가? ... 240 11. 달력 페이지 ... 241 12. 정확한 타이머 ... 244 13. 프로그램을 잠시동안 멈추기 ... 246 14. 프로그램 : 알림 서비스 ... 247 7장. 자바를 이용한 데이터 구조 자바로 데이터 빵틀 만들기 ... 251 01. 배열을 이용한 데이터 구조 ... 253 02. 배열 크기 조절 ... 254 03. 배열처럼 그러나 좀더 동적으로 ... 256 04. 반복자를 이용한 독립적인 데이터 접근 ... 258 05. 연결 리스트 ... 260 06. 해시 테이블과 해시 맵을 이용한 매핑 ... 263 07. 속성과 환경에 문자열 저장하기 ... 264 08. 컬렉션 정렬 ... 268 09. 자바 1.1에서의 정렬 ... 272 10. 정렬 요구 피하기 ... 274 11. 집합 ... 276 12. 컬렉션에서 객체 찾기 ... 277 13. 컬렉션을 배열로 변환하기 ... 279 14. 사용자 Iterator의 회전 ... 281 15. 스택 ... 283 16. 다차원 구조 ... 284 17. 마지막! 컬렉션 ... 287 18. 프로그램 : 타이밍 비교 ... 289 8장. 객체 지향 기법 자바는 객체 지향 언어이다 ... 293 01. 객체 출력하기 : toString()으로 포맷팅하기 ... 295 02. equals 메소드 오버라이드 ... 297 03. hashCode 메소드 오버라이드 ... 301 04. clone 메소드 ... 302 05. finalize 메소드 ... 306 06. 내부 클래스 사용하기 ... 307 07. 인터페이스를 통해 콜백 제공하기 ... 309 08. 다형성과 추상 메소드 ... 313 09. 값 넘기기 ... 315 10. 사용자 예외 사용하기 ... 318 11. 프로그램 : Plotter ... 319 9장. 입출력 자바를 이용한 읽기와 쓰기 ... 325 01. 표준 입력 읽기 ... 330 02. 표준 출력 쓰기 ... 334 03. 이름으로 파일 열기 ... 335 04. 파일 복사 ... 336 05. 파일을 문자열로 읽기 ... 340 06. 표준 스트림의 재할당 ... 342 07. 스트림을 이중으로 쓰기 ... 343 08. 다른 문자셋 읽고 쓰기 ... 346 09. 귀찮은 행 끝 문자 ... 347 10. 플랫폼 의존적인 파일 코드 조심하기 ... 348 11. 연속 행 읽기 ... 349 12. 파일 스캐닝 ... 355 13. 이진 데이터 ... 360 14. 탐색 ... 361 15. C로부터의 데이터 스트림 쓰기 ... 362 16. 직렬화된 객체의 저장과 복구 ... 365 17. SerialVersionUID로 ClassCastException 방지하기 ... 367 18. JAR나 Zip 읽고 쓰기 ... 369 19. 압축 파일 읽고 쓰기 ... 373 20. 프로그램 : 텍스트를 포스트스크립트로 ... 375 21. 프로그램 : TarList(파일 변환자) ... 379 10장. 디렉토리, 파일시스템 조작 디렉토리와 파일이 시스템을 만든다 ... 393 01. 파일 정보 얻기 ... 394 02. 파일 생성 ... 398 03. 파일명 변경 ... 399 04. 파일 삭제 ... 400 05. 임시 파일 생성 ... 402 06. 파일 등록정보 변경 ... 403 07. 디렉토리 나열하기 ... 405 08. 디렉토리 루트 얻기 ... 408 09. 새 디렉토리 만들기 ... 409 10. 프로그램 : Find ... 410 11장. 직렬/병렬 포트 프로그래밍 자바 통신 API도 알아보자 ... 415 01. 포트 선택하기 ... 418 02. 직렬 포트 열기 ... 423 03. 병렬 포트 열기 ... 427 04. 포트 충돌 방지 ... 431 05. 정해진 방식으로 읽고 쓰기 ... 435 06. 읽고 쓰기 위한 이벤트 조정하기 ... 439 07. 스레드 읽고 쓰기 ... 444 08. 프로그램 : 펜맨 플로터 ... 446 12장. 그래픽과 사운드 멋진 화면을 보는 것은 즐겁다 ... 453 01. Graphics 객체로 색칠하기 ... 454 02. 그래픽 컴포넌트 테스트하기 ... 456 03. 그리기 테스트 ... 457 04. 컴포넌트 가운데 텍스트 그리기 ... 457 05. 그림자 효과 ... 459 06. 이미지 그리기 ... 462 07. 사운드 파일 재생하기 ... 467 08. 비디오로 움직이는 이미지 보여주기 ... 469 09. 2D로 텍스트 그리기 ... 472 10. 출력하기 : JDK 1.1 ... 475 11. 출력하기 : 자바2 ... 477 12. 프로그램 : PlotterAWT ... 480 13. 프로그램 : Grapher ... 483 13장. GUI 자바의 윈도우화 기능 ... 487 01. GUI 컴포넌트 보여주기 ... 489 02. 윈도우 레이아웃 디자인하기 ... 491 03. 탭으로 구성한 화면 ... 494 04. 액션 처리 : 버튼의 동작 만들기 ... 495 05. 익명 내부 클래스를 이용한 액션 처리 ... 498 06. 윈도우를 닫아 프로그램 끝내기 ... 500 07. 대화상자 ... 505 08. 윈도우에 프로그램 결과 출력하기 ... 508 09. JFileChooser로 파일 선택하기 ... 512 10. 색상 선택 ... 515 11. 메인 윈도우 중앙에 두기 ... 518 12. 스윙 프로그램의 룩앤필 바꾸기 ... 520 13. 프로그램 : 사용자 폰트 선택자 ... 525 14. 프로그램 : 사용자정의 레이아웃 관리자 ... 530 14장. 국제화와 지역화 프로그램에도 국제화는 필요하다 ... 539 01. I18N 자원으로 버튼 만들기 ... 540 02. 가능한 모든 지역 목록 나열하기 ... 543 03. I18N 자원으로 메뉴 생성하기 ... 544 04. 국제화 편리 루틴 작성하기 ... 545 05. I18N 자원을 이용하여 대화하기 ... 547 06. 자원 번들 생성하기 ... 549 07. 코드 JILT 처리하기 ... 550 08. 특정 지역 사용하기 ... 552 09. 기본 지역 설정하기 ... 553 10. 메시지 형식 만들기 ... 555 11. 프로그램 : Menulntl ... 557 12. 프로그램 : BusCard ... 559 15장. 네트워크 클라이언트 Ⅰ 소켓을 이용한 통신 ... 565 01. 서버와 교신하기 ... 568 02. 네트워크 주소 탐색과 보고 ... 570 03. 네트워크 에러 처리 ... 572 04. 텍스트형 데이터 읽고 쓰기 ... 573 05. 이진 데이터 읽고 쓰기 ... 576 06. 직렬화된 데이터 읽고 쓰기 ... 579 07. UDP 데이터그램 ... 581 08. TFTP UDP 클라이언트 ... 584 09. 텔넷 클라이언트 프로그램 ... 590 10. 채팅 클라이언트 ... 592 16장. 서버측 자바 : 소켓 서버는 소켓으로 연다 ... 599 01. 상업용 서버 열기 ... 600 02. 응답하기(문자열 또는 이진 데이터) ... 603 03. 객체 정보 반환하기 ... 608 04. 다중 클라이언트 다루기 ... 609 05. 네트워크 로깅 ... 615 06. 프로그램 : 자바 채팅 서버 ... 620 17장. 네트워크 클라이언트 Ⅱ 애플릿과 웹 클라이언트 ... 627 01. 웹 페이지에 자바 내장하기 ... 628 02. 애플릿 기술 ... 630 03. 애플릿 호스트에 있는 서버에 연결하기 ... 633 04. 문서를 보여주는 애플릿 작성하기 ... 636 05. CGI 스크립트를 실행하는 애플릿 작성하기 ... 638 06. URL의 내용 읽기 ... 640 07. URL에서 HTML 추출하기 ... 641 08. 파일에서 URL 추출하기 ... 644 09. 파일명을 URL로 변환하기 ... 646 10. 프로그램 : MkIndex ... 647 11. 프로그램 : LinkChecker ... 653 18장. 웹 서버 자바 : 서블릿과 JSP 서블릿과 JSP로 웹 페이지에 힘을 주자 ... 661 01. 서블릿 처음 사용하기 : HTML 페이지 생성 ... 662 02. 서블릿 : 폼 매개변수 처리 ... 666 03. 쿠키 ... 670 04. 세션 추적 ... 674 05. 서블릿에서 PDF 생성하기 ... 680 06. HTML과 자바의 만남 : JSP ... 687 07. JSP Include/Forward ... 692 08. 서블릿을 이용하는 자바 서버 페이지 ... 694 09. 자바빈으로 JSP 단순화하기 ... 695 10. JSP 구문 정리 ... 700 11. 프로그램 : CookieCutter ... 701 12. 프로그램 : JabaDot 웹 뉴스 포탈 ... 702 19장. 자바와 이메일 메일 송수신에도 자바는 한 몫을 한다 ... 713 01. 이메일 전송 : 브라우저 버전 ... 714 02. 이메일 전송 : 실질적인 메일 클라이언트 제공 ... 719 03. 메일을 사용할 수 있는 서버 프로그램 ... 723 04. 마임 형식 메일 전송 ... 730 05. 메일 설정 제공하기 ... 732 06. 자바메일을 사용하지 않고 메일 전송하기 ... 734 07. 이메일 읽기 ... 739 08. 프로그램 : MailReaderBean ... 745 09. 프로그램 : MailClient ... 750 20장. 데이터베이스 접속 JDBC로 데이터베이스에 접속해보자 ... 763 01. 텍스트 파일 데이터베이스 ... 765 02. DBM 데이터베이스 ... 771 03. JDBC 설치와 연결 ... 775 04. JDBC 데이터베이스에 연결하기 ... 778 05. JDBC 질의 보내기와 결과 가져오기 ... 782 06. 문장을 매개변수화한 JDBC 사용하기 ... 785 07. JDBC로 저장된 프로시저 사용하기 ... 790 08. ResultSet을 이용한 데이터 변경 ... 791 09. SQL을 이용한 데이터 변경 ... 792 10. JDBC 메타데이터 찾기 ... 795 11. 프로그램 : JDAdmin ... 802 21장. XML 자바와 XML의 만남 ... 811 01. XSLT를 이용해 XML 변환하기 ... 814 02. SAX를 이용해 XML 파싱하기 ... 818 03. DOM을 이용해 XML 파싱하기 ... 820 04. DTD를 이용해 구조 검증하기 ... 824 05. DOM을 이용해 자신만의 XML 생성하기 ... 825 06. 프로그램 : xml2mif ... 827 22장. 분산 자바 : RMI 분산 환경에서 자바 RMI로 자원을 모아보자 ... 831 01. RMI 계약 정의 ... 833 02. RMI 클라이언트 ... 835 03. RMI 서버 ... 836 04. 네트워크로 RMI 배포하기 ... 840 05. 프로그램 : RMI 콜백 ... 841 06. 프로그램 : RMIWatch ... 846 23장. 패키지와 패키지화 자신만의 자바 패키지를 만들어보자 ... 855 01. 패키지 생성 ... 856 02. Javadoc을 이용해 클래스 문서화하기 ... 857 03. jar를 이용해 아카이빙하기 ... 861 04. Jar로부터 애플릿 실행하기 ... 863 05. JDK를 이용해 애플릿 실행하기 ... 863 06. JAR로부터 프로그램 실행하기 ... 868 07. 클래스를 자바빈처럼 만들기 ... 868 08. JAR에 빈 집어넣기 ... 873 09. WAR 파일에 서블릿 패키지화하기 ... 874 10. 일단 작성하면 설치는 어디에서나 가능하다 ... 875 11. 자바 웹 스타트 ... 876 12. 사용자정의 JAR 파일에 서명하기 ... 883 24장. 스레드 자바 스레드로 동시에 여러 작업이 충돌하지 않도록 조절하자 ... 885 01. 다른 스레드로 코드 실행하기 ... 887 02. 애니메이션으로 움직이는 이미지 표시하기 ... 892 03. 스레드 정지 문제 ... 896 04. 랑데부와 타임아웃 ... 899 05. 스레드 통신 : 동기화 코드 ... 900 06. 스레드 통신 : wait(), notifyAll() ... 907 07. 편집기에서 백그라운드 저장하기 ... 914 08. 스레드를 사용하는 네트워크 서버 ... 916 25장. 리플렉션과 CLASS 클래스 클래스 정보를 찾아보자 ... 927 01. 클래스 배치자 구하기 ... 928 02. 메소드와 필드 찾아 이용하기 ... 930 03. 클래스를 동적으로 로딩하고, 인스턴스화하기 ... 934 04. 클래스 생성 ... 937 05. 실행 시간 ... 939 06. 클래스 정보 출력하기 ... 943 07. 프로그램 : CrossRef ... 945 08. 프로그램 : AppletViewer ... 952 26장. 다른 언어와 함께 자바 사용하기 외부 프로그램도 자바처럼 사용해보자 ... 961 01. 프로그램 실행 ... 962 02. 프로그램 실행과 출력 캡쳐 ... 966 03. BSF로 자바와 스크립트 섞기 ... 969 04. 네이티브 코드(C/C++) 섞기 ... 975 05. 네이티브 코드에서 자바 호출하기 ... 982 06. 프로그램 : DBM ... 982 찾아보기 ... 983