목차
Part Ⅰ 자바 프로그래밍 개요
   chapter 01 자바 개요 ... 25
      01 자바 개요 ... 25
        개요 ... 25
        자바의 정의 ... 30
        넓은 의미의 자바 ... 32
        자바 플랫폼 ... 33
        자바 프로그램 ... 34
        자바 언어 ... 35
      02 자바 플랫폼 소개 ... 35
        역할 ... 35
        Java 2 플랫폼들 ... 39
      03 마치면서 ... 39
   chapter 02 자바 프로그래밍 개요 ... 43
      01 자바 언어의 특성 ... 43
      02 플랫폼과 관련된 자바 언어의 특성 ... 45
      03 자바 프로그램의 구성 요소 ... 47
        패키지 ... 47
        자바 클래스 ... 48
        J2SE 기본 API(core APIs) ... 49
      04 프로그래밍 준비 ... 50
      05 애플리케이션의 컴파일과 실행 ... 51
      06 프로그래밍에 익숙해지기 ... 53
        프로그램의 기본틀 ... 54
        주석 ... 54
        공백과 줄바꿈 ... 56
        소스 코드 가독성 높이기 ... 57
        프로그래밍 기초 정리 ... 58
      07 자바 언어의 구성 요소 ... 58
   chapter 03 데이터 형과 변수 ... 63
      01 데이터 형 ... 63
      02 자바의 데이터 형 ... 66
      03 기본형 ... 68
        정수형 ... 69
        정수형의 표현 ... 70
        문자형 ... 72
        실수형 ... 73
        논리형 ... 75
      04 배열(Array) ... 76
      05 문자열(String) ... 77
      06 클래스(Class)와 인터페이스(Interface) ... 77
      07 상수와 변수 ... 78
      08 리터럴(Literals) 상수 ... 79
        기본형 리터럴 ... 79
        Null 리터럴 ... 80
        문자열 리터럴 ... 80
      09 변수 선언하기 ... 81
      10 변수 이름 관례 ... 82
      11 변수 이름 규칙 ... 83
   chapter 04 연산식과 연산자 ... 87
      01 연산식과 연산자 ... 87
      02 산술 연산자(Arithmetic Operators) ... 90
        뎃셈 종류 연산자 ... 91
        곱셈 종류 연산자 ... 92
        단항 부호 연산자 ... 94
        단항 증감 연산자 ... 94
byte, short 형의 연산 ... 97
      03 관계 연산자 ... 98
      04 논리 연산자 ... 100
      05 비트 연산자 ... 105
        비트 단위 논리 연산자 ... 106
        비트 단위 부정 연산자 ... 110
        비트 단위 이동 연산자 ... 111
      06 대입 연산자 ... 113
      07 기본형의 형변환 ... 115
        묵시적인 형변환과 광역화 형변환 ... 115
        명시적인 형변환과 협소화 형변환 ... 116
        기본형의 표현 범위 ... 118
   chapter 05 연산자의 활용 ... 123
      01 연산식의 조합과 연산 순서 ... 123
      02 연산 순서 ... 125
      03 연산자의 우선 순위 ... 127
        연산자의 결합 방향(Associativity) ... 130
      04 연산식에서의 형변환 ... 131
      05 상수 연산식(Constant Expression) ... 134
   chapter 06 명령문 ... 141
      01 명령문 ... 141
      02 연산문 ... 142
      03 블록 ... 143
      04 레이블이 붙은 명령문 ... 144
      05 제어문 ... 145
      06 if 문 ... 147
switch 문 ... 150
        while 문 ... 154
        do ~ while 문 ... 155
        for 문 ... 156
break ... 160
        continue 문 ... 164
        무한 루프 ... 166
      07 지역 변수와 레이블의 유효 범위(Scope) ... 167
      08 명령문에 관련된 컴파일 에러들 ... 169
   chapter 07 배열과 문자열 ... 173
      01 문자열 ... 173
        문자열 생성과 초기화 ... 173
        문자열 + 연산자 ... 174
        문자열의 표준 출력 ... 177
      02 배열 ... 178
        개요 ... 178
        배열형 변수 정의 ... 180
        배열 초기화 ... 182
        배열 생성문 ... 183
        배열의 원소 제어 ... 185
        배열 익숙해지기 ... 187
        배열형의 형변환 ... 189
        배열과 메모리 ... 190
   chapter 08 알고리즘 기초 ... 195
      01 개요 ... 195
      02 수열(Series) 구하기 ... 196
      03 7카드에서 족보 판별하기 ... 198
      04 반복법 ... 200
      05 시행 착오 알고리즘 ... 203
        개요 ... 203
        8개의 여왕 문제 ... 204
        프로그램 ... 207
        알고리즘 고찰 ... 208
      06 재귀적 알고리즘 ... 209
        메소드 ... 210
        수열 값 구하기 ... 211
        하노이 타워 ... 213
        재귀적 알고리즘의 문제 ... 216
      07 정렬 ... 217
        선택 정렬 ... 217
        퀵 정렬 ... 219
Part Ⅱ 객체 지향 프로그래밍
   chapter 09 객체지향 프로그래밍과 자바 ... 227
      01 객체지향 프로그래밍 ... 227
      02 언어 이야기 ... 229
      03 뒷 이야기 ... 231
   chapter 10 객체지향 프로그래밍(OOP)의 기본 개념 ... 235
      01 객체지향 패러다임 ... 235
        객체, 메시지, 그리고 바인딩(binding) ... 237
      02 객체지향 프로그래밍의 핵심적인 요소들 ... 237
        객체(Object) ... 238
        클래스(Class) ... 238
        추상화(abstraction) ... 239
        캡슐화(encapsulation) ... 240
        상속(Inheritance) ... 240
        다형성(Polymorphism) ... 241
   chapter 11 클래스와 객체 ... 245
      01 필드와 메소드 ... 246
      02 클래스와 계층 구조 ... 250
   chapter 12 클래스 ... 253
      01 클래스의 개념 ... 253
      02 객체의 생성과 소멸 ... 254
        객체의 생성 ... 254
        객체의 사용 ... 255
        객체의 소멸 ... 257
      03 클래스의 작성 ... 258
        클래스의 선언 ... 258
        생성자(constructor) ... 260
        finalize 메소드 ... 262
        인스턴스 멤버와 클래스 멤버 ... 262
        멤버에 대한 접근 제어 ... 266
      04 정적 초기화 블록 ... 268
      05 중첩 클래스 ... 269
        중첩된 최상위 클래스 ... 270
        멤버 클래스 ... 272
        지역 클래스 ... 275
        익명 클래스 ... 276
      06 클래스의 확장 ... 277
        클래스 확장을 이용한 프로그래밍 ... 278
        트리구조의 클래스 계층 ... 282
        final 메소드와 클래스 ... 285
        확장과 생성자 ... 287
        상속과 접근 지정자 ... 289
      07 추상 클래스 ... 290
   chapter 13 인터페이스 ... 295
      01 인터페이스의 개념 ... 295
      02 인터페이스의 작성 ... 298
        인터페이스의 선언 ... 298
        인터페이스의 확장 ... 299
      03 인터페이스의 구현과 사용 ... 301
        인터페이스의 구현 ... 301
        인터페이스의 사용 ... 303
      04 인터페이스와 다중 상속 ... 306
      05 마커 인터페이스 ... 309
      06 인터페이스와 추상 클래스 ... 309
   chapter 14 상속(Inheritance) ... 313
      01 Object 클래스 ... 315
      02 자바와 다중 상속(multiple inheritance) ... 317
      03 '상속'을 사용하는이유 ... 318
        코드의 재사용성 ... 319
        안정성의 향상 ... 319
        일관된 인터페이스 ... 319
        소프트웨어 컴포넌트 ... 320
        생산성 ... 320
        다형성 ... 320
        정보은닉(Information Hiding) ... 321
      04 상속에 드는 비용 ... 321
        실행 속도 ... 321
        프로그램의 크기 ... 322
        프로그램 복잡도 ... 322
   chapter 15 다형성(Polymorphism) ... 325
      01 다형적 변수(Polymorphic variable) ... 325
      02 오버라이딩(Overriding) ... 327
      03 오버로딩(Overloading) ... 328
      04 Example : 샘플 패키지 라이브러리 ... 331
   chapter 16 다형성과 형 변환 ... 339
      01 광역화 참조 형 변환 ... 341
      02 협소화 참조 형 변환 ... 342
   chapter 17 RTTI(Run-Time Type Identification) ... 347
      01 RTTI의 개요 ... 347
      02 RTTI 구문 ... 350
        전통적인 캐스팅 ... 350
        instanceof 키워드를 이용한 RTTI ... 351
        Class 객체 ... 352
   chapter 18 패키지(Package) ... 355
      01 패키지의 멤버 ... 356
        패키지의 서브패키지(subpackage) ... 356
        데이터 형(클래스, 인터페이스) ... 356
      02 패키지의 선언 ... 357
      03 패키지 멤버의 참조 ... 358
        패키지 멤버의 정식 이름을 사용하는 방법 ... 358
        import 문을 사용하는 방법 ... 359
      04 패키지와 클래스패스(classpath) ... 361
        클래스패스(classpath) ... 362
        클래스패스와 패키지 그리고 클래스 ... 363
      05 Name space ... 365
      06 패키지의 이름 정하기 ... 366
   chapter 19 고급 객체지향 프로그래밍 ... 369
      01 상속 ... 369
        상속의 화용론적 문제점 ... 369
        소프트웨어 재사용 수단으로서의 상속 ... 370
        구현 상속 ... 371
        인터페이스 상속 ... 372
        조합(composition) ... 372
        상속과 조합의 비교 ... 375
      02 서브클래싱과 서브타이핑 ... 380
        서브클래스(subclass)와 서브타입(subtype) ... 380
        서브클래싱과 서브타이핑의 혼용에 따른 부작용 ... 382
   chapter 20 예외 처리(Exception handling) ... 389
      01 자바에서의 예외(Exception) ... 389
      02 예외의 발생 원인 ... 392
      03 예외를 발생(throw)시키기 ... 392
        묵시적으로 발생하는 예외 ... 393
        명시적으로 발생하는 예외 ... 394
      04 발생한 예외 처리하기 ... 396
        try ... 397
        catch ... 397
        finally ... 399
      05 사용자 정의 예외 클래스의 작성 ... 402
      06 생성자(constructor)와 예외 ... 406
      07 예외의 계층구조 ... 408
        Exception 클래스와 RuntimeException 클래스 ... 408
        Error 클래스 ... 411
Part Ⅲ 기본 API
   chapter 21 언어와 System API ... 419
      01 개요 ... 419
      02 String과 StringBuffer ... 420
        String 객체 생성 ... 420
        String 클래스의 메소드 ... 422
        String 비교 ... 423
        문자열 검색 ... 424
        문자와 문자열 추출 ... 426
        문자열 변환 ... 427
        기본형을 문자열로 변환 ... 427
        뮤터블 vs 임뮤터블 ... 428
        StringBuffer 클래스 ... 430
        StringBuffer를 사용한 문자열 연산 ... 431
        StringBuffer vs 문자열 연산자 ... 433
      03 래퍼(Wrapper) 클래스들 ... 435
        Number 클래스 ... 436
        Byte, Short, Integer, Long ... 437
        Float와 Double ... 438
        기본형, 래퍼, String 간의 형변환 ... 440
      04 시스템 관련 ... 441
        System 클래스 ... 441
        Runtime ... 446
      05 Math 클래스 ... 449
   chapter 22 파일과 입출력 ... 455
      01 java.io 패키지 ... 455
        File ... 457
        예제 : 루트 파일 시스템 보기 ... 460
        예제 : JavaDir ... 461
        RandomAccessFile ... 463
      03 스트림 개요 ... 466
      04 스트림의 특성 ... 468
        FIFO ... 468
        순차 접근 ... 468
        단방향 ... 469
        연결 유지 ... 469
        지연 ... 469
      05 스트림의 분류 ... 469
      06 바이트 입력 스트림 ... 472
        바이트 입력 스트림의 생성과 사용 ... 473
        BufferedInputstream ... 474
      07 바이트 출력 스트림 ... 477
        바이트 출력 스트림의 생성과 사용 ... 478
        BufferedOutputStream ... 480
        PrintStream ... 480
      08 캐릭터 입력 스트림 ... 482
        LineNumberReader ... 484
      09 캐릭터 출력 스트림 ... 485
        PrintWriter ... 486
      10 바이트 스트림을 캐릭터 스트림으로 변환 ... 488
      11 스트림 감싸기 테크닉 ... 489
      12 StreamTokenizer ... 491
   chapter 23 유틸리티 API ... 497
      01 개요 ... 497
      02 부가 데이터 형들 ... 498
        Arrays 클래스 ... 499
        해시 테이블(Hashtable) ... 505
        Vector ... 509
        스택 ... 513
      03 시간 관련 클래스들 ... 515
        Date 클래스 ... 515
        캘린더(Calendar) ... 516
      04 기타 클래스들 ... 519
        StringTokenizer ... 519
        난수(Random) ... 522
   chapter 24 프로세스와 스레드 ... 527
      01 개요 ... 527
        멀티 태스팅 ... 529
        멀티 태스팅의 효과 ... 530
        자바와 스레드 ... 533
      02 스레드 만들기 ... 534
      03 스레드 익숙해지기 ... 538
      04 사용자 스스레드와 데몬 스레드 ... 540
      05 스레드의 실행 주기 ... 541
        생성 / 시작 가능 상태(Startable) ... 542
        실행 가능 상태(Runnable) ... 542
        실행 중단 상태(Not Runnable) ... 543
        소멸 상태(Dead) ... 544
      06 Thread 클래스 ... 544
      07 스레드 제어 ... 546
        스레드 스케줄링 ... 548
        예제 : 스레드 종료시키기 ... 549
        예제 : 스레드 체인 ... 551
        예제 : 행렬 연산 ... 554
      08 스레드 그룹 ... 556
      09 Timer와 TimerTask ... 558
      10 프로세스 ... 561
        프로세스 생성 ... 561
        프로세스의 종료 ... 563
        Process 클래스 ... 564
   chapter 25 멀티 스레드 프로그래밍 ... 569
      01 멀티 스레딩 분석 ... 569
        다중 작업의 효율성 점검 ... 571
        멀티 스레딩의 안정성 ... 575
        자원 관리 ... 577
        멀티 스레딩에서의 주의 사항들 ... 578
      02 동기화 개념 ... 578
        일반 개념 ... 579
        동기화에 사용되는 테크닉들 ... 580
      03 스레드의 동기화 ... 584
        개요 ... 584
        자원에 대한 권한 ... 585
        동기화된 메소드 ... 586
        동기화 블록 ... 590
      04 배타적 동기화 ... 591
        배타적 동기화 예제 ... 592
      05 상호 협조 동기화 ... 594
        생산자 소비자 예제 ... 597
        다중 소비자인 경우 동기화 ... 600
      06 교착과 기아 ... 604
      07 재진입과 스레드 안전 ... 608
        재진입 가능 메소드 ... 608
        스레드 안전 ... 609
   chapter 26 직렬화 ... 613
      01 직렬화 개요 ... 613
      02 직렬화 익숙해지기 ... 615
      03 객체 스트림 ... 618
        객체 출력 스트림 ... 618
        객체 입력 스트림 ... 620
        복잡한 객체 저장하기 ... 621
      04 직렬화 가능한 클래스 만들기 ... 623
      05 사용자 정의 직렬화 ... 625
        직렬화 금지 시키기 ... 626
      06 복원된 객체 검증 ... 627
      07 버전 관리 ... 629
      08 직렬화 전략 ... 630
   chapter 27 컬렉션 프레임워크 ... 633
      01 개요 ... 633
        역할 ... 633
        인터페이스의 개념 ... 634
        JCF 인터페이스들 ... 636
        구현 알고리즘들 ... 636
        JCF 구현 클래스들 ... 640
      02 Collection 인터페이스 ... 642
        Iterator ... 644
      03 Set ... 645
        Set 인터페이스 ... 645
        HashSet ... 646
        TreeSet ... 648
        Set 연산 ... 651
      04 List ... 653
        List 인터페이스 ... 653
        ListIterator ... 655
        ArrayList ... 656
        LinkedList ... 656
        List 연산 ... 659
      05 Map ... 660
        Map.Entry 인터페이스 ... 662
        HashMap ... 662
        TreeMap ... 663
        Map 연산 ... 664
      06 Collections 클래스 ... 665
        리스트 원소 제어 ... 665
        비교와 탐색 ... 667
        정렬 ... 668
        변환 ... 669
        상수 컬렉션 ... 669
        Singleton 만들기 ... 669
        임뮤터블 컬렉션 만들기 ... 670
        동기화 컬렉션 만들기 ... 671
      07 컬렉션 번환 ... 675
      08 JCF 요약 ... 676
   chapter 28 자료구조와 알고리즘 연습 ... 679
      01 개요 ... 679
      02 JCF 분석 ... 680
        ArrayList ... 681
        LinkedList ... 692
      03 하노이 타워 재고찰 ... 696
      04 샘플링 ... 701
        포커 게임에서의 샘플링 ... 701
        Dealer 클래스 ... 703
        Player 클래스 ... 704
        족보 확률 계산 ... 706
        족보 검사 ... 709
        메인 프로그램 ... 712
      05 시뮬레이션 ... 715
Part Ⅳ 고급 프로그래밍
   chapter 29 코딩 관례와 문서화 주석 ... 727
      01 자바 코딩 관례 ... 727
        파일 이름 관례 ... 728
        자바 소스 파일의 구조 ... 729
        들여쓰기 ... 730
        변수와 클래스의 선언 ... 731
        명령문 ... 732
        이름 붙이기 ... 733
        프로그래밍 관행 ... 735
      02 문서화 주석 ... 736
        HelloJavaDoc ... 737
        javadoc 유틸리티 ... 739
        문서화 주석의 형태와 위치 ... 740
        태그 ... 741
   chapter 30 국제화 ... 745
      01 개요 ... 745
        Hello18N ... 747
      02 Locale 클래스 ... 749
      03 ResourceBundle의 사용 ... 751
        Locale과 리소스 이름 ... 751
        ResourceBundle 클래스 ... 753
        자원 텍스트 파일 ... 754
        사용자 정의 자원 클래스 ... 756
      04 포매팅 ... 758
        개요 ... 758
        숫자와 통화 포매팅 ... 759
        사용자 정의 숫자 포매팅 ... 761
        시간과 날짜 포매팅 ... 762
        사용자 정의 날짜 포매팅 ... 764
        초이스 포매팅 ... 766
        메시지 포매팅 ... 767
        메시지 포맷과 ResourceBundle의 활용 ... 770
        복수형의 처리 ... 772
   chapter 31 디버깅 ... 777
      01 개요 ... 777
      02 버그의 종류 ... 779
        설계상의 오류 ... 779
        문법 오류 ... 780
        논리 오류 ... 781
      03 디버깅 포인트 ... 782
        반복문의 범위 ... 782
        기본형의 극한적인 사용 ... 784
        부작용 주의 ... 784
      04 디버깅 메시지 사용 ... 785
      05 디버깅 툴의 사용 ... 787
      06 버그 관리 ... 788
      07 버전 관리 시스템 ... 788
   chapter 32 최적화 ... 791
      01 개요 ... 791
      02 프로파일링 ... 792
      03 컴파일 ... 793
      04 버퍼링과 풀링 ... 794
        버퍼링 ... 795
        풀링 ... 795
      05 자원 관리 ... 799
        객체 사용 최적화 ... 799
        메모리 관리자 ... 801
      06 인터페이스 최적화 ... 801
      07 최적화 코딩 기법들 ... 804
        지역 변수 vs 멤버 변수 ... 804
        기본형 vs 배열 ... 806
        인라이닝 ... 809
        문자열 사용 최적화 ... 810
        배열 사용 최적화 ... 810
   chapter 33 자바 VM과 바이트코드 프로그래밍 ... 813
      01 개요 ... 813
      02 자바 VM의 구조 ... 814
      03 표시법 ... 816
      04 클래스 파일 구조 ... 818
        클래스 파일 검증 예제 ... 820
      05 자바 VM 바이트코드 ... 822
        자바 VM의 관례 ... 823
        바이트코드의 동작 ... 824
store와 load 명령어들 ... 825
        산술 명령어들 ... 828
        형 변환 ... 831
        스택 제어 ... 832
        분기 명령 ... 833
        복합 분기 명령 ... 837
        배열 생성과 제어 ... 840
        인스턴스 생성과 제어 ... 841
        메소드 호출과 변환 ... 842
      06 바이트코드 프로그래밍 ... 844
        HelloByteCode ... 845
        더하기 제어 ... 847
        스택의 활용 ... 848
   chapter 34 단언(Assertion) ... 851
      01 단언 개요 ... 851
      02 J2SE 1.4에서의 단언 기능 ... 853
        단언 기능을 위한 컴파일러 옵션 ... 853
        단언 구문과 의미 ... 854
        단언 기능의 적용과 해제 ... 855
        프로그램에서의 단언 기능 설정 ... 856
      03 단언 기능의 활용 ... 858
        내부 불변식 ... 858
        불가능성의 표현 ... 859
        사전조건 / 사후조건 / 클래스 불변식 ... 860
        부수작용 존재 여부 검사 ... 862
      04 이전 버전 시스템을 위한 단언 기능 구현 ... 863
Part Ⅴ 설계와 구현
   chapter 35 UML ... 869
      01 개요 ... 869
      02 클래스 다이어그램 ... 870
        패키지 ... 870
        클래스 ... 871
        객체 ... 872
        노트 ... 873
        연관 ... 873
        상속 ... 874
        인터페이스와 구현 ... 874
        포함 관계 ... 875
        자바로 구현하기 ... 876
      03 협력 다이어그램 ... 878
        객체 ... 878
        행위자 ... 878
        협력 관계 ... 879
      04 시퀀스 다이어그램 ... 880
        객체 ... 880
        메시지 전달 ... 881
        시퀀스 다이어그램 예제 ... 882
        코딩 ... 883
      05 상태 다이어그램 ... 884
        기호들 ... 884
        상태 다이어그램 예 ... 885
      06 활동 다이어그램 ... 886
   chapter 36 설계 패턴 ... 891
      01 설계 패턴 개요 ... 891
      02 설계 패턴의 분류 ... 892
      03 객체 생성 관련 패턴 ... 893
        Abstract Factory ... 893
        Factory Method ... 895
      04 복합 객체 관련 패턴 ... 896
        Composite ... 896
        Interpreter ... 897
        Visitor ... 898
        요약 ... 900
      05 간접화 패턴 ... 900
        Adapter ... 901
        Decorator ... 901
        Proxy ... 902
        요약 ... 903
      06 변경 공지 패턴 ... 903
        Observer ... 904
        Mediator ... 905
      07 객체로서의 프로시저 ... 905
        Strategy ... 906
        Command ... 908
        요약 ... 908
      08 형과 구현 계층의 분리 ... 908
        Bridge ... 909
      09 성능 향상 ... 910
        Flyweight ... 910
        Singleton ... 911
        State ... 912
부록
   A. 각종 OS에서의 JDK 구하기 ... 919
   B. 윈도95 / 98에서의 JDK 설치 ... 920
      JDK 설치 ... 920
      환경 변수 설정 ... 920
      JDK 테스트하기 ... 922
   C. 윈도 NT / 2000에서의 환경변수 설정 ... 923
   D. JDK 툴 사용법 ... 924
      java ... 924
      javac ... 926
   E. 프로그래밍 에디터와 통합 개발환경 ... 928
      프로그래밍 에디터 ... 928
      IDE ... 928
   F. 자바 관련 툴들 ... 928
      디버거, 프로파일러, 기타 분석툴 ... 928
      자바 어셈블러 ... 928
   G. UML 툴들 ... 929
닫기