목차
서문 ... 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
닫기