목차
LESSON 01 시작하기
1. 테스트하기 = 43
2. 디자인 = 43
3. 간단한 테스트 = 44
4. JUnit = 46
5. 테스트 추가하기 = 48
6. Student 생성하기 = 49
7. Student 클래스 생성하기 = 50
8. 생성자 = 52
9. 지역 변수 = 53
10. 메소드에서 값을 반환하기 = 54
11. 확인하기 = 56
12. 인스턴스 변수 = 59
13. 테스트 요약 = 62
14. 재구성하기 = 62
15. this = 65
16. private = 67
17. 이름짓기 관례 = 69
18. 공백 = 71
연습문제 = 72
LESSON 02 자바의 기초
1. CourseSession = 75
2. 수강신청하기 = 76
3. int = 76
4. 초기화 = 79
5. 기본 생성자 = 80
6. 스위트 = 81
7. SDK와 java.util.ArrayList = 82
8. 객체 추가하기 = 84
9. 점진적인 재구성 = 86
10. 메모리상의 객체 = 87
11. 패키지와 import 명령어 = 88
12. java.lang 패키지 = 89
13. 기본 패키지와 package 문 = 90
14. setUp 메소드 = 92
15. 추가적인 재구성하기 = 93
16. 클래스 상수 = 94
17. 날짜 = 96
18. 오버로드된 생성자 = 97
19. 디프리케이트 경고 = 101
20. 재구성하기 = 102
import 재구성하기 = 103
팩토리 메소드에 대한 이해 = 103
21. Date와 Calendar 생성하기 = 105
22. 주석 = 105
23. javadoc 주석 = 107
연습문제
LESSON 03 문자열과 패키지
1. 문자와 문자열 = 113
문자 = 113
특수 문자 = 114
2. 문자열 = 115
문자열 연결하기 = 115
문자열의 불변성 = 116
3. StringBuilder = 116
4. 시스템 속성 = 118
5. 모든 학생을 루프에서 엑세스하기 = 119
6. 단일 역할의 원칙 = 121
7. 재구성하기 = 124
8. System.out = 127
9. System.out 사용하기 = 128
10. 재구성하기 = 129
11. 패키지 구조 = 129
12. 접근 수식어 = 130
13. Ant 사용하기 = 136
연습문제
LESSON 04 클래스 메소드와 필드(field)
1. 클래스 메소드 = 143
2. 클래스 변수 = 146
3. 클래스 변수와 클래스 메소드에 대한 연산 = 147
4. 스태틱 임포트 = 150
5. 증가 = 153
6. 팩토리 메소드 = 154
7. 단순한 디자인 = 156
8. 정적 사용의 위험성 = 156
9. 정적 코드 사용하기 : 다양한 주의사항 = 157
10. 제프의 정적 코드 규칙 = 158
11. 불린 = 159
12. 문서화로서의 테스트 = 163
13. 초기화에 대하여 = 166
14. 예외 = 167
15. 기본형 필드 초기화 다시 보기 = 168
연습문제 = 169
LESSON 05 인터페이스(interface)와 폴리모피즘(polymorphism)
1. 정렬 : 준비 = 171
2. 정렬 : Collections.sort = 172
3. CourseReportTest = 173
4. 인터페이스 = 174
5. 왜 인터페이스인가? = 175
6. Comparable 구현하기 = 176
7. 학과와 번호로 정렬하기 = 178
8. if 문 = 179
9. 학점 정하기 = 180
10. 플로팅포인트 숫자 = 180
11. 학점 테스트하기 = 181
12. 재구성하기 = 184
13. enum = 186
14. 폴리모피즘 = 188
15. 인터페이스 참조 사용하기 = 193
16. ArrayList와 List 인터페이스 = 195
연습문제 = 196
LESSON 06 상속(inheritance)
1. switch 문 = 201
2. case 레이블은 레이블일 뿐이다 = 202
3. 맵 = 204
4. 상속 = 206
5. 추상 클래스 = 209
6. 메소드 확장하기 = 210
7. 재구성하기 = 212
8. Grade enum을 확장하기 = 214
9. 여름학기 과목 = 215
10. 상위 클래스 생성자 호출하기 = 216
11. 재구성하기 = 219
12. 생성자에 대한 추가사항 = 222
13. 상속과 폴리모피즘 = 224
14. 하청의 법칙 = 224
연습문제 = 232
LESSON 07 전통적인 요소
1. 루프 구조 = 235
2. 학생의 이름 나누기 = 235
while 루프 = 237
재구성하기 = 238
for 루프 = 238
for 루프에서의 다중 초기화와 갱신식 = 239
do 루프 = 242
3. 자바 루프의 비교 = 242
4. 재구성하기 = 244
isPalindrome = 244
피보나치와 재귀 = 244
5. 루프 제어명령 = 245
break 문 = 245
continue 문 = 245
레이블 있는 break와 continue 문 = 246
6. 삼중 연산자 = 247
7. 기존의 콜렉션 = 248
8. 이터레이터 = 249
9. 이터레이터와 for-each 루프 = 251
10. 캐스팅 = 252
기본형 캐스팅하기 = 253
11. 래퍼 클래스 = 253
오토박싱과 오토언박싱 = 255
12. 배열 = 257
배열 초기화하기 = 260
배열을 사용할 때 = 260
가변인수 = 261
다차원 배열 = 263
배열 클래스 = 264
Arrays.equals = 264
13. 재구성하기 = 265
문자열 나누기 = 265
문자열 나누기 : String.split = 266
연습문제 = 268
LESSON 08 예외(Exception)와 로그(logging)
1. 예외 = 271
2. 예외 다루기 = 273
3. 확인된 예외 = 274
4. 예외의 계층구조 = 276
5. 스스로 예외형을 생성하기 = 277
6. 확인된 예외와 확인되지 않은 예외 = 279
7. 메시지 = 280
8. 여러 개의 예외 잡기 = 281
9. 예외를 전달하기 = 282
10. 스텍 트레이스 = 285
11. finally 블록 = 285
12. 재구성하기 = 287
13. 로그 = 289
14. 자바에서의 로그기록 = 290
15. 기록 확인하기 = 293
16. 파일로 로그 기록하기 = 296
17. 로그에 대한 테스트 철학 = 299
18. FileHandler에 대한 추가사항 = 300
19. 로그 레벨 = 301
20. 로그 계층구조 = 302
21. 로그에 대한 추가사항 = 303
연습문제 = 304
LESSON 09 맵과 동일성
1. 논리 연산자 = 311
2. 연산 생략 = 312
3. 해쉬 테이블 = 312
4. 강의 = 314
5. Session 재구성하기 = 316
6. 동일성 = 322
7. 동일성에 대한 약속 = 324
8. 사과와 오렌지 = 326
JUnit과 동일성 = 327
9. 콜렉션과 동일성 = 328
10. 해쉬 테이블 = 329
11. 충돌 = 330
12. 이상적인 해쉬 알고리즘 = 331
13. hashCode에 대한 마지막 내용 = 333
14. HashMap 사용에 대한 추가사항 = 335
15. 추가적인 해쉬 테이블과 집합 구현 = 339
EnumSet = 339
Treeset과 TreeMap = 340
LinkedHashSet과 LinkedHashMap = 340
IndentityHashMap = 340
16. toString = 340
17. 문자열과 동일성 = 342
연습문제 = 344
LESSON 10 수학계산
1. BigDecimal = 347
BigDecimal 사용하기 = 347
유효숫자 = 348
나누기와 근사값 = 349
2. 기본 숫자형에 대한 추가사항 = 350
다른 정수형 = 350
3. 정수형 계산 = 351
4. 숫자 캐스팅하기 = 351
5. 계산식 평가 순서 = 353
6. NaN = 353
7. 무한 = 355
8. 수치 오버플로우 = 356
9. 비트 연산 = 356
이진수 = 357
자바 이진 표현 = 357
논리적 비트 연산자 = 357
bit-and와 bit-or, 부정 사용하기 = 359
xor 사용하기 = 361
비트 쉬프트 = 363
BitSet = 363
10. java.lang.Math = 364
숫자 래퍼 클래스 = 365
출력 가능한 표현 = 366
11. 문자열을 숫자로 바꾸기 = 366
12. 랜덤 숫자 = 367
랜덤 코드 테스트하기 = 368
연습문제 = 371
LESSON 11 입출력(IO)
1. 구성 = 375
2. 문자 스트림 = 375
3. 파일로 쓰기 = 380
4. java.io.File = 382
5. 바이트 스트림과 변환 = 384
6. Student 사용자 인터페이스 = 384
7. 응용프로그램 테스트하기 = 388
8. 데이터 스트림 = 389
9. CourseCatalog = 390
10. 추가적인 스트림 = 393
파이프된 스트림 = 393
SequenceInputStream = 393
푸쉬백 스트림 = 393
스트림 분리기 = 393
11 객체 스트림 = 394
일시성 = 395
직렬화와 수정 = 396
시리얼 버전 UID = 397
직렬화 형태 지정하기 = 398
직렬화 방법들 = 400
12. 임의 접근 파일 = 400
13. StudentDirectory = 401
14. sis.db.DatafileTest = 403
15. 정적 내장 클래스와 내부 클래스 = 405
16. sis.db.DataFile = 407
17. sis.db.KeyFileTest = 409
18. sis.db.KeyFile = 411
19. sis.util.IOUtilTest = 412
20. sis.util.IOUtil = 413
21. sis.util.TestUtil = 414
22. 발전시키기 = 415
연습문제 = 416
LESSON 12 반영과 다른 상급 주제
1. 모방 객체 다시 보기 = 419
2. 짐 밥 ACH 인터페이스 = 420
3. 모방 클래스 = 422
4. Account 클래스 구현 = 424
5. 이름없는 내부 클래스 = 426
6. 아답터 = 428
7. 외부 클래스에서 변수에 접근하기 = 430
8. 트레이드오프 = 432
9. 반영 = 433
10. JUnit 코드 사용하기 = 433
11. Class 클래스 = 435
12. Suite 만들기 = 437
13. 클래스 수식어 = 439
14. 동적 프록시 = 440
15. 안전한 Account 클래스 = 443
16. 보안 계좌 구현하기 = 443
17. SecureProxy 클래스 = 448
18. 반영의 문제점 = 451
연습문제 = 452
LESSON 13 멀티쓰레드(multithreading)
1. 멀티쓰레드 = 455
2. 검색 서버 = 455
3. Search 클래스 = 456
4. 좀더 독립적인 테스트하기 = 459
5. Server 클래스 = 462
6. 테스트에서 기다리기 = 465
7. 쓰레드 생성하고 실행하기 = 465
8. 협조형과 선점형 멀티테스킹 = 469
9. 동기화 = 470
10. Runnable로 쓰레드 만들기 = 472
11. 동기화 = 473
12. 동기화된 콜렉션 = 474
13. BlockingQueue = 475
14. 쓰레드 멈추기 = 476
15. 기다리기와 통보하기 = 478
16. 기다리기와 통보하기에 대한 추가적인 사항 = 482
17. 락과 조건 = 482
18. 쓰레드 우선순위 = 484
19. 데드락 = 485
20. ThreadLocal = 486
21. Timer 클래스 = 489
22. Thread에 관련된 여러 가지 = 491
아토믹 변수와 volatile = 491
Thread 정보 = 492
종료하기 = 492
예외 관리하기 = 494
쓰레드 그룹 = 495
아토믹 래퍼 = 495
23. 요약 : 동기화에 대한 기본적인 디자인 원칙 = 496
연습문제 = 497
LESSON 14 일반화
1. 인수화된 변수형 = 499
2. 콜렉션 프레임워크 = 499
3. 다중 형식 인수 = 500
4. 인수화된 형 만들기 = 500
5. 삭제 = 503
6. 상위 제한 = 504
7. 와일드카드 = 507
8. 와일드카드 사용의 영향 = 509
9. 일반화 메소드 = 510
10. 와일드카드 캡쳐 = 511
11. Super = 512
12. 추가적인 제한 = 513
13. 로우 형식 = 515
14. 확인된 콜렉션 = 516
15. 배열 = 518
16. 추가적인 제한 = 519
17. 반영 = 519
18. 마지막 주의사항 = 520
연습문제 = 521
LESSON 15 어써션(assertion)과 아노테이션(annotation)
1. 어써션 = 523
2. 어써션 명령문과 JUnit assert 메소드 = 524
3. 아노테이션 = 524
4. 테스트 도구 만들기 = 525
5. TestRunnerTest = 526
6. TestRunner = 527
7. @TestMethod 아노테이션 = 530
8. 유지 = 532
9. 아노테이션 타겟 = 533
10. 테스트 메소드 건너뛰기 = 534
11. TestRunner 수정하기 = 535
12. 단일 값 아노테이션 = 536
13. TestRunner 사용자 인터페이스 클래스 = 539
14. 배열 인수 = 540
15. 다중 인수 아노테이션 = 542
16. 기본값 = 543
17. 추가적인 반환형과 복잡한 아노테이션 형식 = 544
18. 패키지 아노테이션 = 546
19. 호환성 고려사항 = 547
20. 아노테이션에 대한 추가적인 주의사항 = 548
21. 요약 = 549
연습문제 = 550
LESSON Ⅰ 스윙(Swing) 1
1. 스윙 = 553
2. 시작하기 = 554
3. 스윙 응용프로그램 디자인 = 558
4. 패널 = 559
5. 재구성하기 = 563
6. 추가적인 위젯 = 566
7. 재구성하기 = 569
8. 버튼 클릭과 액션리스너 = 572
9. 리스트 모델 = 574
toString의 사용 = 576
10. 응용프로그램 = 577
11. 레이아웃 = 580
GridLayout = 580
BorderLayout = 582
테스트 문제 = 584
BoxLayout = 585
12. GridBagLayout = 586
13. 앞으로 나아가기 = 590
LESSON Ⅱ 스윙(Swing) 2
1. 여러가지 미학적 고려사항 = 593
JScrollPane = 593
보더(border) = 593
제목 추가하기 = 594
아이콘(icon) = 595
2. 감각(feel) = 598
키보드 지원 = 598
버튼 뉴모닉 = 598
필요한 필드 = 599
필드 편집 = 603
필터 테스트하기 = 604
필터 코팅하기 = 606
필터 붙이기 = 607
두 번째 필터 = 609
JFormattedTextField = 610
3. 테이블 = 618
4. 피드백 = 623
StatusBar = 624
5. 응답성 = 629
6. 남은 작업 = 632
7. 마지막 주의사항 = 633
LESSON Ⅲ 자바에 대한 여러가지 정보
1. JAR = 637
2. 정규 표현식 = 639
문자열 나누기 = 640
문자열의 표현 바꾸기 = 641
Pattern과 Matcher 클래스 = 642
추가적인 정보 = 644
3. 클론과 코바리언스 = 644
4. JDBC = 646
데이터베이스에 접속하기 = 647
쿼리 실행하기 = 650
준비된 명령문 = 652
JDBC 응용프로그램 디자인 = 654
5. 국제화 = 654
리소스 묶음 = 655
지역화 = 657
형식화된 메시지 = 659
국제화가 필요한 다른 부분들 = 661
6. 레퍼런스를 이용한 호출과 값을 이용한 호출 = 662
7. 자바의 주변관리 = 663
속성 = 664
속성 파일 = 665
선택사항 = 666
시스템 환경 = 669
다른 응용프로그램 실행하기 = 669
8. 다른 무엇이 있는가? = 673
커스텀 클래스 로더 = 673
약한 참조 = 673
finalize 메소드 = 674
중개 = 675
Management = 675
네트워크 = 675
NIO = 675
JNI = 676
RMI = 676
빈즈 = 677
보안 = 677
추가? = 678
부록
1. 애자일 자바 용어 해설 = 681
2. 자바 연산자 우선 규칙 = 690
3. IDEA 시작하기 = 691
찾아보기 = 706