목차 일부
Part Ⅰ 자바 프로그래밍 개요
chapter 01 자바 개요 ... 25
01 자바 개요 ... 25
개요 ... 25
자바의 정의 ... 30
넓은 의미의 자바 ... 32
자바 플랫폼 ... 33
자바 프로그램 ... 34
자바 언어 ... 35
...
더보기
목차 전체
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
더보기 닫기