서문 ... 23 1. 껍질을 깨고: 간단한 소개 ... 35 2. 객체마을로의 여행: 객체에 대해 알아봅시다 ... 61 3. 네 변수를 알라: 원시 변수와 레퍼런스 ... 83 4. 객체의 행동: 객체의 상태가 메소드의 속성에 미치는 영향 ... 105 5. 메소드를 더 강력하게: 흐름 제어, 연산 등 ... 129 6. 자바 라이브러리: 전부 다 직접 만들어서 쓸 필요는 없습니다 ... 159 7. 객체마을에서의 더 나은 삶: 미래를 준비합시다 ... 199 8. 심각한 다형성: 추상 클래스와 인터페이스 ... 231 9. 객체의 삶과 죽음: 생성자와 메모리 관리 ... 269 10. 숫자는 정말 중요합니다: 수학, 포매팅, 래퍼, 통계 ... 307 11. 위험한 행동: 예외 처리 ... 349 12. 그래픽 이야기: GUI, 이벤트 처리, 내부 클래스에 대한 소개 ... 387 13. 스윙을 알아봅시다: 레이아웃 관리와 구성요소 ... 433 14. 객체 저장: 직렬화와 입출력 ... 463 15. 연결하는 방법: 네트워크 소켓과 멀티스레딩 ... 505 16. 자료구조: 컬렉션 및 제네릭 ... 563 17. 코드를 베포합시다: 패키지 제작과 배포 ... 615 18. 분산 컴퓨팅: RMI와 서블릿, EJB와 지니 ... 641 A 부록A: 마지막 코드 키친 ... 683 B 부록B: 거의 본문에 들어갈 뻔 했던 내용 Top 10 ... 693 찾아보기 ... 710 서문 이책은 어떤 독자를 위한 책일까요? ... 23 당신의 머리에서 일어나고 있는 일 ... 24 초인지 ... 27 자신의 두뇌를 정복하는 방법 ... 29 이 책을 읽는 데 필요한 것 ... 30 기술 편집인 ... 32 감사의 글 ... 33 1. 껍질을 깨고 자바는 어떤 식으로 돌아갈까? ... 36 자바 코드의 구조 ... 41 클래스를 해부합시다 ... 42 main()메소드 ... 44 순환문 ... 45 조건에 따른 분기문 ... 47 '맥주 99병' 애플리케이션 코드 ... 48 자동 구문 생성기 ... 51 집중 토론: 컴파일러와 자바 가상 머신 ... 52 연습문제와 퍼즐 ... 54 2. 객체마을로의 여행 의자 전쟁(객체지향맨 브래드와 프로시저맨 래리) ... 62 상속(기초) ... 65 메소드를 오버라이드하는 방법(기초) ... 66 클래스 안에는 뭐가 있을까?(메소드, 인스턴스 변수) ... 68 첫번째 객체를 만들어봅시다 ... 70 main()을 사용하는 방법 ... 72 게임 코드 알아 맞추기 ... 73 연습문제와 퍼즐 ... 76 3. 네 변수를 알라 변수 선언(자바에서는 유형을 까다롭게 따집니다) ... 84 원시 변수 유형 ... 85 자바 키워드 ... 87 레퍼런스 변수(객체에 대한 리모컨) ... 88 객체 선언과 대입 ... 89 가비지 컬렉션 기능이 있는 힙에서의 객체 ... 91 배열 ... 93 연습문제와 퍼즐 ... 97 4. 객체의 행동 메소드와 객체의 상태 ... 107 메소드 인자와 리턴 유형 ... 108 값으로 전달 ... 111 게터와 세터 ... 113 캡슐화 ... 114 배열에서 레퍼런스를 사용하는 방법 ... 117 연습문제와 퍼즐 ... 122 5. 메소드를 더 강력하게 닷컴 가라앉히기 게임 만들기 ... 130 간단한 닷컴 게임 ... 132 준비 코드를 만들어봅시다(게임을 만들기 위한 유사코드) ... 134 간단한 닷컴 게임을 만들기 위한 테스트 코드 ... 136 간단한 닷컴 게임 코드 작성 ... 137 간단한 닷컴 게임 최종 코드 ... 140 Math. random()으로 난수를 만들어내는 방법 ... 145 명령행에서 사용자가 입력한 내용을 받아오기 위한 인스턴트 코드 ... 146 for 순환문을 써서 순환시키는 방법 ... 148 원시값을 더 큰 변수에서 작은 변수로 캐스팅하는 방법 ... 151 Integer.parseInt()를 가지고 String을 int로 변환하는 방법 ... 151 연습문제와 퍼즐 ... 152 6. 자바 라이브러러 간단한 닷컴 게임 버그 분석 ... 160 ArrayList(자바 API를 활용하는 방법) ... 166 닷컴 클래스 코드 고치기 ... 172 진짜 게임 만들기(닷컴 가라앉히기) ... 174 진짜 게임을 만들기 위한 준비 코드 ... 178 진짜 게임을 만들기 위한 코드 ... 180 부울 표현식 ... 185 라이브러리(자바 API) 활용 ... 188 패키지 사용 방법(import 선언문, 전체 이름) ... 189 HTML API 문서와 레퍼런스 서적을 활용하는 방법 ... 192 연습문제와 퍼즐 ... 195 7. 객체마을에서의 더 나은 삶 상속의이해(수퍼클래스와 하위클래스 사이의 관계) ... 202 상속 트리 설계(Animal 시뮬레이션) ... 204 중복된 코드를 피하는 방법(상속 활용 방법) ... 205 메소드 오버라이딩 ... 206 "A는 B다" 관계와 "A에는 B가 있다" 관계(욕조 안의 아가씨) ... 211 수퍼클래스로부터 상속받는 것 ... 214 상속 활용의 장점 ... 216 다형성(하위클래스 객체에 대해 수퍼유형 레퍼런스를 사용하는 방법) ... 217 오버라이딩 규칙(인자와 리턴 유형은 건드리지 맙시다) ... 224 메소드 오버로딩(메소드명을 재활용하는 것뿐입니다) ... 225 연습문제와 퍼즐 ... 226 8. 심각한 다형성 인스턴스를 만들 수 없는 클래스 ... 234 추상 클래스(인스턴스를 만들 수 없습니다) ... 235 추상 메소드(반드시 구현해야 합니다) ... 237 다형성을 실제로 활용하는 방법 ... 240 Object 클래스(모든 클래스의 수퍼클래스) ... 242 ArrayList에서 객체를 꺼내는 방법(기본적으로 모두 Object 유형입니다) ... 245 컴파일러에서 레퍼런스 유형을 체크하는 방법 ... 247 내부 객체 ... 248 다형적 레퍼런스 ... 249 객체 레퍼런스 캐스팅(상속 트리에서 아래로 내려가는 방법) ... 250 죽음의 다이아몬드(다중 상속에서 생길 수 있는 문제) ... 257 인터페이스 사용 방법 ... 258 연습문제와 퍼즐 ... 264 9. 객체의 삶과 죽음 스택과 힙, 객체와 변수가 살아가는 곳 ... 270 스택에 들어있는 메소드 ... 271 지역 변수가 있는 위치 ... 272 인스턴스 변수가 있는 위치 ... 273 객체 생성 ... 274 생성자(new를 실행하면 실행되는 코드) ... 275 새로운 Duck 객체의 상태를 초기화하는 방법 ... 277 오버로드된 생성자 ... 281 수퍼클래스 생성자 ... 284 this()를 써서 오버로드된 생성자를 호출하는 방법 ... 290 객체의 삶 ... 292 가비지 컬렉션 ... 294 연습문제와 퍼즐 ... 300 10. 숫자는 정말 중요합니다 Math 클래스 ... 308 정적 메소드 ... 309 정적 변수 ... 311 상수(static final 변수) ... 316 Math 메소드(random(), round(), abs()등) ... 320 래퍼 클래스(Integer, Boolean, Character 등) ... 321 오토박싱 ... 323 숫자 포매팅 ... 328 날짜 포매팅 및 조작 ... 335 import static 구문 ... 341 연습문제와 퍼즐 ... 344 11. 위험한 행동 음악 프로그램 만들기(비트박스) ... 350 위험한 코드를 호출해야 한다면 어떻게 할까요? ... 353 예외를 통해 "뭔가 안 좋은 일이 생겼음"을 알 수 있습니다 ... 354 컴파일러에서 위험 요소를 파악하고 있는지 확인해줍니다 ... 355 try / catch를 써서 예외를 잡아내는 방법 ... 356 try / catch 블록에서의 흐름 제어 ... 360 finally 블록 ... 361 여러 가지 예외를 잡아내는 방법 ... 363 예외 선언 ... 369 처리 또는 선언 규칙 ... 371 코드 키친(소리를 만드는 방법) ... 373 연습문제와 퍼즐 ... 382 12. 그래픽 이야기 첫번째 GUI ... 389 사용자 이벤트 ... 391 리스너 인터페이스 구현 방법 ... 392 버튼의 ActionEvent를 받는 방법 ... 394 GUI에 그래픽을 출력하는 방법 ... 397 PaintComponent() ... 399 Graphics2D 객체 ... 400 화면에 버튼 두개 이상을 집어넣는 방법 ... 404 내부 클래스 ... 410 애니메이션 ... 416 코드 키친 ... 420 연습문제와 퍼즐 ... 428 13. 스윙을 알아봅시다 스윙 구성요소 ... 434 레이아웃 관리자 ... 435 세 가지 레이아웃 관리자 ... 437 BorderLayout ... 438 FlowLayout ... 442 BoxLayout ... 445 JTextField ... 447 JTextArea ... 448 JCheckBox ... 450 JList ... 451 코드 키친 ... 452 연습문제와 퍼즐 ... 458 14. 객체 저장 객체의 상태를 저장하는 방법 ... 465 직렬화된 객체를 파일로 저장하는 방법 ... 466 자바의 입력과 출력 스트림 ... 467 객체 직렬화 ... 468 Serializable 인터페이스를 구현하는 방법 ... 471 transient 변수를 사용하는 방법 ... 473 객체를 역직렬화하는 방법 ... 475 텍스트 파일에 쓰는 방법 ... 481 java.io.File ... 486 텍스트 파일로부터 읽어오는 방법 ... 488 split()을 써서 String을 토큰으로 나누는 방법 ... 492 코드 키친 ... 496 연습문제와 퍼즐 ... 500 15. 연결하는 방법 채팅 프로그램 개요 ... 507 연결, 송신, 수신 ... 508 네트워크 소켓 ... 509 TCP 포트 ... 510 Socket으로부터 데이터를 읽는 방법(BufferedReader 사용) ... 512 Socket으로 데이터를 쓰는 방법(PrintWriter 사용) ... 513 DailyAdviceClient 프로그램 만들기 ... 514 간단한 서버 만들기 ... 517 DailyAdviceServer 코드 ... 518 채팅 클라이언트 만들기 ... 520 다중 호출 스택 ... 524 새로운 스레드를 시작하는 방법 ... 526 Runnable 인터페이스 ... 528 새로운 Thread 객체의 세 가지 상태 ... 529 실행 가능한 상태와 실행 중인 상태 사이의 전환 ... 530 스레드 스케줄러 ... 531 스레드를 중지시키는 방법 ... 535 스레드 두 개를 만들어서 시작하는 방법 ... 537 병행성 문제 ... 539 라이언과 모니카의 병행성 문제를 코드로... ... 540 락을 거는 방법 ... 544 모든 객체에는 락이 있습니다 ... 545 공포의 '갱신 내용 손실' 문제 ... 546 동기화된 메소드 ... 548 락을 해제할 수 없는 경우 ... 550 멀티스레드를 사용한 ChatClient 코드 ... 552 인스턴트 SimpleChatServer ... 554 연습문제와 퍼즐 ... 558 16. 자료구조 컬렉션 ... 567 Collections.sort()를 이용한 ArrayList 정렬 ... 568 제네릭과 형 안전성 ... 574 comparable 인터페이스를 구현하는 항목 정렬법 ... 581 Comparator를 활용한 정렬법 ... 586 컬렉션 API - 목록, 집합, 맵 ... 591 HashSet를 이용해서 중복을 피하는 법 ... 593 HashCode() 및 equals() 오버라이딩 ... 594 HashMap ... 601 다형성을 위한 와일드카드 활용 ... 608 연습문제 및 퍼즐 ... 610 17. 코드를 배포합시다 배포 방법 ... 616 소스 코드와 클래스 파일은 분리합시다 ... 618 실행 가능한 JAR 파일을 만드는 방법 ... 619 실행 가능한 JAR를 실행하는 방법 ... 620 클래스를 패키지에 넣읍시다 ... 621 패키지와 디렉토리 구조 ... 623 패키지로 컴파일하고 실행하는 방법 ... 624 -d 컴파일 옵션 ... 625 실행가능한 JAR 파일을 만드는 방법(패키지) ... 626 웹을 통해 배포하기 위한 자바 웹 스타트(JWS) ... 631 JWS 애플리케이션을 만들어서 배포하는 방법 ... 634 연습문제와 퍼즐 ... 635 18. 분산컴퓨팅 자바 원격 메소드 호출(RMI), 자세한 예제 ... 648 서블릿 ... 659 엔터프라이즈 자바 빈즈(EJB) ... 665 지니 ... 666 정말 훌륭한 범용 서비스 브라우저를 만드는 방법 ... 670 끝 ... 682 A. 부록 A 마지막 비트박스 코드(클라이언트 코드) ... 684 마지막 비트박스 코드(서버 코드) ... 691 B. 부록 B Top 10 목록 ... 694 i 찾아보기 ... 710