본격적인 자바 개발자로 JUMP UP!
자바 2 SDK 1.4 시작 그리고 완성

샘플 장 - 독자 서평 - 책 목차 및 팁 - 유용한 예제 색인
샘플 : 책 내용 중 9장, 17장, 27장 원고 내용을 PDF 문서로 만들었습니다. 책의 구성을 이해하는 데 도움이 될 것입니다.New!

교보 문고에 실린 독자 서평입니다. 좋은 서평 써 주신 최재웅님께 깊은 감사드립니다.

 	
	독자서평 읽기

찾아보기 힘든 훌륭한 Java 국내서 ㅣ 최재웅 (-) ㅣ 2003.6.28 ㅣ ★★★★★
			
자바 2 SDK 1.4 시작 그리고 완성

윤경구 l 대림 l 2003.2.20
정가 37,000원

자바 SDK에 대한 AtoZ를 다루는 류의 책은 정말 많다. 그런데, 제목과
차례를 지나가듯 읽어보면
이 책을 그러한 범주에 넣어 지나쳐 버리는 중대한 실수를 범할 수 있다...

Java에 관한 많은 책을 접하고 구입해왔다. 책을 구입할 때의 기준은
나름대로 몇 가지가 있다.
 그중에 가장 흔한 기준은 출판사에 대한 신임일 것이다. O'reilly나
Manning, Addison-Wesley, Wiley등...
 이름만 들어도 믿음이 간다(물론 번역서는 항상 그렇지는 않다).

그러나 이 책을 고를때는, 독자는 책의 저자인 윤경구씨에 주목했다.
 국내의 자바 인더스트리에서 활동하는 사람이라면 한번쯤은 들어봤을만큼
영향력있는 아키텍트인 그가 만든 책이라면...하는 생각에,
 별로 내키지 않는 바이블류의 책이었지만 처음부터 천천히 읽어보게 되었던 것이다.

이 책에 대한 단상을 한마디로 하자면 '고수가 만든 깊이있는 입문서'라고
할 수 있겠다.
 단순한 예제 소스코드 하나에도 저자의 노하우가 숨어있는 것을 자주
발견하며 '역시'라는 감탄을 한다.
 비록 요소기술을 깊이있게 다루는 것이 아닌 바이블류의 책임에도 말이다.

책의 특성상, 요소기술마다에 대한 complete guide는 될 수 없지만 짚고
넘어가야 할 핵심은 모두 짚어주고 있다.
 Java로 개발을 하면 할 수록 여러가지 기술을 모두 잘 알아야 할 필요성을
절감하는 때가 많다.
 한 두가지 요소기술만을 잘해서는 사용자가 원하는 다양한 요구, 제품의
기능을 충족시킬 수가 없는것이다.
 그렇다고 해서 개발자에게 모든 것에 대한 Tutorial과 Guide, Tech. article을 섭렵할 충분한 시간이 주어지지도 않는다.

말이 짧아 두서없이 얘기했지만, 책의 뒷표지에 있는 소개가 가장 적절할
것 같아 그것을 적어보는 것이 좋을 것 같다.
"이 책은... 깊이 있는 내용을 다루면서도... 군더더기 없이 자바의 깊은 개념들을 소화해서 응용할 수 있도록 하고 있다"
도전과 좌절...

한 인터넷 서점에 올라온 서평에서 도전해볼 만한 책이지만, 좌절하기 쉬운 책이라는 평이 있습니다.
그 표현 또한 맞을 것 같습니다.
이 책은 본격적인 자바 개발자로 가기 위한 디딤돌이 되기 위해 썼기 때문입니다.
본격적인(serious) 개발자가 되기 위해서는 보다 어려운 상황을 헤쳐나갈 수 있어야 합니다. 새로운 기술을 적용하고, 다른 측면에서 문제를 파악하고, 동일한 방식을 반복하지 않고, 끊임없이 개발 능력을 키워가야 합니다.
많은 자바 개발자들이 JSP와 같은 상대적으로 간단한 스크립팅과 반복된 패턴에만 안주하는 경향이 있습니다.
하지만, 소프트웨어는 항상 새로운 문제에 부닥치게 됩니다. 예를 들어, 자바든 C든 코딩을 하다보면 운영 체제를 이해해야 하고, 메모리 관리를 이해해야 하고, 튜닝 전략을 고민해야 하고, ... 계속 프로그래머로서 길을 가고자 한다면 만나게 되는 문제들입니다.
문제는 이것을 피하지 않고 정면으로 도전하는 것입니다.
그런 개발자들에게 도움이 되는 책이라고 생각합니다.
한꺼번에 모든 걸 다 이해할 수는 없습니다. 이 책의 코드들은 대부분 실제 프로젝트에서 쓸 수 있는 정리되고 검증된 코드들입니다.
이해되지 않는 부분은 copy and paste 방식부터 시작해서, 시간이 날 때 책에 표시된 관련 URL들도 살펴보고, 또 나중에 다시 문제에 부닥쳤을 때 다시 한번 검토해보는 방식으로 하면 될 것입니다.

이해가 안된다고 조급한 마음으로 좌절감을 느낄 필요는 없습니다.
현재 장이 조금 어렵다고, 다음 장도 어렵고 이해가 안되는 것은 아니므로, 꾸준히 진행하시면 좋은 결과가 있을 것입니다.
1000 페이지가 넘고, 다른 책 3권에 해당하는 3개 파트로 구성된 책을 모두 다 이해하면서 넘어가기보다는 1부를 잘 이해한 기반 위에서 2부는 조금씩 진행하고 3부는 필요한 기술별로 찾아서 읽는 방식이 도움을 줄 것입니다.
1부는 쉬운 내용들로 구성되어 있으므로, 1부를 어렵다고 느끼면 2부는 개발 경험을 1,2년 더 거치는 동안 보지 않는 것이 좋겠습니다.
1부를 반복해서 보고, 3부는 필요한 부분을 먼저 찾아봐도 됩니다.
용기 있는 코더에게 힘을 주는 책이 되면 좋겠습니다.

- by yoonforh 2003-12-08 22:24:24

책을 쓴 후에...

어렵게 넉 달에 걸쳐 낮밤을 바꿔 새면서 책을 썼습니다.
어려운 내용이지만, 이해가 필요한 여러 부분들 참조 객체, 클래스로더, 프록시 객체, 자바 메모리 모델, 그리고 분산 환경 등
어려운 내용을 정확하고 개념적으로 쉽게 전달하기 위해 많은 노력을 기울였습니다.
또, 필자의 개발 이력을 살려 다국어 처리, 인쇄, 그리고 자바 빈즈, 컨테이너 등 쉽게 접하기 힘든 부분들을 (하지만 대한민국의 개발자로서는 필요할 수 있는 부분들을) 충분히 담고자 노력하였습니다.
필자 스스로 부여하는 이 책의 가치는 번역 책, 짜집기 책들과는 비교할 바 아니라고 자부합니다.
고급 자바 개발자가 되고 싶은, 하지만 지금은 너무 쉬운 문제들에만 반복적인 코딩을 하는 개발자라면 이 책을 한번 읽어보길 권합니다.
Unleashed나 Bible 류의 원서들과는 비교할 수 없는 깊이와 실용성을 느낄 수 있을 것입니다.

머리말 중에서

이 책의 독자는 크게 두 가지 층을 생각하였다. C나 C++ 등의 프로그래밍 경험이 있는 개발자로서 자바를 배우고자 하는 층과 자바를 조금 다루어봤지만 좀더 깊이 있는 자바 프로그래머로 발전하고자 하는 층이다. 자바 2 기업판을 사용하면서 기초가 튼튼하지 않다고 느끼는 개발자에게도 튼튼한 기초를 제공할 수 있을 것이다.
이에 따라, 문법은 소홀히 하지 않으면서도 압축해서 다루고, 자바 소프트웨어 개발자로서 만나게 되는 여러 가지 문제들을 일반화하여 해결책을 제시하려 하였다.

1부는 기초가 되는 문법과 기본적인 자바 프로그래밍 영역을 다룬다. 문법에 대한 설명은 간략하면서도 한 가지를 더 생각할 수 있도록 조금씩 깊이를 넣었다.

2부는 1부에서 다룬 지식들을 기반으로 좀더 다양하고 깊이 있는 주제를 다룬다. 특히 실전에 많은 도움이 될 여러 가지 프로그래밍 기법과 고급 문법들을 다루었다.

3부는 자바 기술의 확장된 외연을 다룬다. XML 문서 처리로부터 데이터베이스, C/C++ 프로그램과의 통신, 분산 환경, 웹 기반 프로그램 모델까지 접할 수 있다. 기업 환경의 프로그램을 작성하고 J2EE를 이해하기 위한 좋은 기반이 될 것이다.

1부는 자바의 기본을 충실하게 다루므로, 1부의 내용을 이해하면 자바 프로그래머로서 역할을 수행할 수 있을 것이다.
2부는 1부의 내용을 좀더 깊이 있게 다루므로, 1부를 먼저 읽은 다음에 읽을 것을 권장한다.
3부의 각 장들은 상대적으로 독립적인 주제들로 구성되므로 순서에 관계 없이 읽어도 무리가 되지 않을 것이다.

이 외에도 워드 프로세서 개발의 경험이 녹아있는 스윙 컴포넌트, 텍스트 처리 등 UI 관련 장들은 개념과 실무 적용에 큰 도움이 될 것이다.
깊이 있는 내용을 다루면서도, 몇몇 기본 문법 장들을 제외한 대부분의 장에서 개발자들이 가장 이해하기 쉬운 방식인 따라하기 방식을 최대한 활용하여, 군더더기 없이 자바의 깊은 개념들을 접하게 하였다. 필자는 원서를 필요로 하지 않은, 더 나은 한글 자바 책을 쓰고자 노력하였다.

인터넷 교보문고   강컴   Yes 24   Book Park   Aladdin
책 내용 질문을 위한 게시판

샘플 장 - 독자 서평 - 책 목차 및 팁 - 유용한 예제 색인

책 목차

책의 전체 목차입니다. 몇 가지 관련 팁들을 추가할 예정입니다. 2003년 2월에 대림 출판사에서 출간되었습니다. 서점에서는 2월 17일부터 볼 수 있습니다. 밑줄친 단어들은 키워드입니다. 책 표지
1부 자바 기본 다지기

제 1 장 객체 중심 언어, 자바	1Java language, OOP
1.1.	객체 중심 언어, 자바의 탄생	1
1.1.1.	자바 탄생의 역사	1
1.2.	객체의 세계	5
1.2.1.	객체	6Object

1.2.2.	클래스	7Class
1.2.3.	상속과 클래스 계층 구조	8Inheritance
1.2.4.	메시지 전달과 바인딩	8Message Passing and Binding
1.2.5.	다형성	9Polymorphism
1.2.6.	캡슐화	12Encapsulation
1.2.7.	객체 중심 언어의 장점	12
1.3.	자바 개발 환경 갖추기	12
1.3.1.	자바 개발 키트와 문서	12
1.3.2.	Hello, World. 컴파일과 실행	14
1.3.3.	J2SE 문서 설치	17
맺음말	18


제 2 장 클래스와 객체	1Class, Object

2.1.	클래스	1
2.1.1.	클래스의 선언	1
2.1.2.	객체의 생성	3
2.1.3.	객체의 소멸	4
2.2.	클래스 상속	5
2.2.1. 상속의 선언	5
2.2.2. this와 super	7
2.2.3. static 필드와 메소드	9
2.2.4. final 필드와 메소드	10
2.2.5. abstract 메소드, abstract 클래스	11
2.3.	패키지	12package
2.3.1. 패키지	12
2.3.2. 패키지 임포트	14
2.4.	접근 제어	16Access Modifiers
2.4.1. 클래스 접근 제어	16
2.4.2. 필드/메소드 접근 제어	18
2.5.	인터페이스	24Interface
2.5.1	인터페이스	24
2.5.2. 인터페이스 구현	25
2.5.3.	다중 상속	26
2.6. 다형성	29polymorphism
2.6.1.	메소드 호출 다형성	29
2.6.2.	메소드 오버라이드와 필드 감춤	29Method Overriding and Field Hiding
2.6.7.	메소드 오버로드	31Method Overloading

맺음말	32

제 3 장 자바의 문법 구조	1control structure
3.1.	자료형과 변수	1
3.1.1. 자료형과 변수	1
3.1.2. 배열	3Array
3.1.3. 형 변환	4Type Casting
3.1.4. 메소드 인자 전달	5Argument Passing
3.2.	기본 문법 구조	6
3.2.1.	프로그램의 시작점 - main 메소드	6
3.2.2.	제어 구조	7
3.2.2.1. 조건 분기 if 문	7
3.2.2.2. 조건 3항 연산자	8
3.2.2.3. 다중 분기 switch 문	8
3.2.2.4. 반복문	9
3.2.2.5. continue와 break	11
3.2.3.	연산자	12
3.2.3.1.	산술 연산자	12Arithmetic Operator
3.2.3.2.	논리 연산자	15Logical Operator

3.3.	예외 처리	15exception handling
3.3.1.	예외 객체	15
3.3.2. 예외 처리	17
3.3.3. throws 절과 throw	19
3.4.	주석문	22
맺음말	23

제 4 장 기본 시스템 클래스	1
4.1. JDK API 문서의 구성	1
4.1.1. API 문서의 구성	1
4.2. java.lang 패키지의 핵심 클래스들	3
4.2.1. Object 클래스	3
4.2.2. System과 Runtime 클래스	5
4.2.2.1. System 클래스의 표준 입출력 필드	5
4.2.2.2. 시스템 속성	7
4.2.2.3. System 클래스의 주요 메소드	10
4.2.2.4. Runtime 클래스	10
4.2.2.5. 외부 프로그램의 실행	13
4.3. 기본 자료형 클래스	16
4.3.1 String 클래스	16String class
4.3.1.1. String 클래스의 메소드들	17
4.3.1.2. StringBuffer 클래스	20
4.3.2. 기본 자료형 클래스	23
4.3.3. 자료형을 나타내는 Class 객체	24Class class
4.4. 예외 클래스	25
4.4.1. Throwable과 Exception 클래스	25
4.4.2. java.lang 패키지의 예외 클래스들	27
4.4.2.1. 예외	27
4.4.2.2. 런타임 예외	28
4.4.2.3. 에러	28
맺음말	29

제 5 장 자바 윈도우 시스템	1AWT
5.1. 추상 윈도우 툴킷	1
5.1.1. AWT 윈도우	1
5.1.2. 윈도우 프로그램 골격	4
5.1.3. 윈도우 클래스들	9
5.1.3.1. Window 클래스	9
5.1.3.2. Frame 클래스	10
5.1.3.3. Dialog 클래스	11
5.1.4. 컨테이너와 컴포넌트	12Container and Component
5.1.4.1. AWT 컴포넌트	12
5.1.4.2. 컨테이너	14
5.1.5. 피어 컴포넌트	16AWT peer component

5.1.5.1. 피어 컴포넌트와의 통신	16
5.1.5.2. AWT 컴포넌트의 생애 주기	17
5.2. 레이아웃 관리자	21layout manager
5.2.1. BorderLayout 레이아웃 관리자	22
5.2.2. FlowLayout 레이아웃 관리자	26
5.2.3. GridLayout 레이아웃 관리자	27
5.2.4. GridBagLayout 레이아웃 관리자	28
5.2.5. CardLayout 레이아웃 관리자	33
맺음말	37

제 6 장 AWT 이벤트 모델	1AWT event model
1.	AWT 이벤트 처리 모델	1
1.1. AWT 이벤트	1
1.2.	이벤트 리스너 모델	3
1.3. 이벤트 어댑터 클래스	8
2.	내부 클래스	13inner class
2.1. 안긴 클래스의 네 가지 형태	13nested class
2.2. 내부 클래스의 특징	17
2.3. 안긴 클래스의 클래스 파일	18
3.	AWT 이벤트 예제 프로그램	21
3.1.	키 입력 프로그램	21
3.2.	종료 시의 윈도우 상태 기억하는 프로그램	26
맺음말	33

제 7 장 쓰레드	1Thread
7.1. 프로세스와 쓰레드	1
7.2. 쓰레드의 생성	3
7.3. 동기화	8synchronization

7.3.1. 경쟁 조건	8
7.3.2. 동기화	9
7.4. wait와 notify	14
7.5. 쓰레드 수행을 중단하기	18
7.6. 쓰레드 프로그래밍 팁	26
7.6.1. 쓰레드 덤프 시그널	26
7.6.2. 쓰레드 덤프 메소드	28
맺음말	30

제 8 장 입출력 스트림	1I/O stream
8.1. 스트림	1
8.1.1. 자바의 스트림	1
8.1.2. 스트림 클래스	2
8.1.3. 스트림의 사용	5
8.2. 문자 스트림	9character stream
8.2.1. 문자셋 인코딩	9
8.2.2. 문자 스트림 클래스	12
8.2.3. 문자 스트림의 사용	15
맺음말	25


제 9 장 네트웍 통신	1network
9.1. 네트웍	1
9.1. URL 연결	4URL communication
9.1.1. URL	4
9.1.2. URL 연결의 사용	7
9.1.3. URL 스트림 핸들러	16URLStreamHandler class
9.2. 소켓 연결	23socket communication

9.2.1. 소켓을 사용한 통신 방법	24
9.2.2. 소켓 통신 예제	27
9.2.3. C/C++ 프로그램과의 소켓 통신에서 주의할 점	42
9.3. 네트웍 인터페이스 장치 정보	45network interface device
맺음말	47

제 10 장 스윙 컴포넌트	1JFC - swing components
10.1. 가벼운 커스텀 컴포넌트	1AWT - lightweight components
10.2. 스윙 컴포넌트 셋	9
10.3. JRootPane 컨테이너	12
10.4. 모델/뷰 분리 구조	20MVC design pattern
10.5. 룩앤필과 UI 위임	24Pluggable L&F, UI delegates
10.6. 스윙 컴포넌트와 쓰레드 문제	29
10.7. BoxLayout 레이아웃 관리자	30
10.8. 커스텀 스윙 컴포넌트	33
맺음말	45

제 11 장 그래픽 처리	1Graphics, Graphics2D

11.1. Graphics 클래스	1
11.2. 이중 버퍼의 사용	7double buffering
11.3. Graphics2D 클래스와 드로잉	18
11.3.1. 그래픽 환경	19
11.3.2. 도형의 모양	20
11.3.3. 렌더링에 필요한 Graphics2D의 속성들	21
11.3.4. 드로잉 프로그램	22
맺음말	62

제 12 장 디버깅과 로그	1debugging, logging
12.1. 디버깅	1
12.2. assert 사용	2Java language - assert
12.3. 로그 사용	4
12.4. API 문서 생성 도구	11javadoc
12.5. 자바 코딩 관례	14
12.6. 자바 디버거의 사용	15jdb
12.7. 디버깅 팁	19
12.7.1. toString() 메소드의 구현	20
12.7.2. 콜 스택 덤프	20
12.7.3. javap의 사용	21javap

맺음말	22


2부 고급 자바 프로그래밍

제 13 장 고급 자바 문법	1
13.1. 클래스 로더	1classloader
수정된 JarClassLoader 소스 코드
- by yoonforh 2004-07-31 17:49:34
13.2. 리플렉션 11core reflection 13.3. 동적 프록시 21dynamic proxy 13.4. 참조 객체 31reference objects 13.4.1. 자바 객체의 생애 주기 31 13.4.2. 참조 객체 32 맺음말 41 제 14 장 자료 구조와 컬렉션 1Collections 14.1. 컬렉션 프레임웍 1 14.2. 컬렉션 2 14.3. 셋 5Set 14.4. 리스트 6List 14.5. 컬렉션의 순차 7Iteration 14.5. 맵 12Map 14.6. Collections 유틸리티 클래스 15 14.7. 컬렉션 이전의 자료 구조 16 14.8. 퍼포먼스 측정 17 14.9. 컬렉션 활용 - 캐시 구현 21 맺음말 30 제 15 장 국제화와 다국어 지원 1i18n, l10n 15.1. 로칼 1Locale class 15.2. 텍스트 처리 2 15.2.1. Collator 클래스 3 15.2.2. BreakIterator 클래스 5 15.3. 서식 6Format class 15.3.1. 숫자 서식 8 15.3.1.1. NumberFormat 클래스 8 15.3.1.2. DecimalFormat 클래스 10 15.3.1.3. ChoiceFormat 클래스 12 15.3.2. 날짜 서식 14 15.3.3. 메시지 서식 17 15.4. 리소스 번들 19ResourceBundle class 맺음말 24 제 16 장 쓰레드 프로그래밍 기법 1 16.1. 다중 쓰레드 모델 1thread programming model 16.1.1. 주인/일꾼 모델 1Boss/Worker or Master/Slave model 16.1.2. 선원 모델 2Work Crew or Divide and Conquer model 16.1.3. 파이프라인 모델 3Pipeline model 16.2. 전형적인 쓰레드 구조 4thread architecture 16.2.1. 큐 구조 5Multi-thread Queue 16.2.2. 방벽 구조 11Barrier 16.2.3. 세마포어 구조 17Semaphore 16.2.4. 읽기/쓰기 잠금 구조 25Read/Write Lock 16.3. 쓰레드별 데이터 33ThreadLocal class 16.4. 자바 메모리 모델과 volatile 필드 38Java memory model 맺음말 40 제 17 장 고급 자바 파운데이션 클래스 1advanced JFC 17.1. 클립보드 1Clipboard class 17.1.1. 클립보드와 소유주 1 17.1.2. 전송 객체 2Transferable class 17.1.3. 클립보드 사용 예제 2 17.2. 드랙앤드롭 12drag and drop 17.2.1. 드랙앤드롭의 지원 방법 12 17.2.2. 커스텀 전송 객체 15 17.2.3. AWT 컴포넌트에서의 드랙앤드롭 23 17.2.4. 스윙 드랙앤드롭 39 17.3. 실행 취소/재실행 49undo/redo 17.4. 포커스 처리 57focus 17.4.1. KeyboardFocusManager 클래스와 포커스 정책 57 17.4.2. 포커스 사용 예제 59 맺음말 68 제 18장 텍스트 처리와 인쇄 1 18.1. 글꼴과 텍스트 처리 1AttributedString class 18.1.1. 글꼴 정보 1font 18.1.2. TextLayout 활용 8TextLayout class 18.2. 다국어 입력 19Input Method Framework, IMF 18.3. 인쇄 39print service 18.3.1. 인쇄 서비스의 사용 39 18.3.2. Graphics2D를 사용하는 인쇄 41 18.3.3. 스트림 인쇄 42stream print service 18.3.4. 인쇄 예제 프로그램 43 맺음말 68 제 19 장 자바 빈즈와 컨테이너 1 19.1. 자바 빈즈 컴포넌트 모델 1JavaBeans 19.2. 자바 빈 개발하기 5 19.2.1. 속성 6 19.2.2. 메소드와 이벤트 11 19.2.3. 이벤트 리스너 객체 목록 12 19.2.4. 인트로스펙션과 BeanInfo, 커스터마이저 12 19.2.5. 빈의 기본 요건 13 19.2.6. 빈 컴포넌트 예제 13 19.2.7. 빈빌더를 사용한 빈 테스트 25Bean Builder 19.3. 빈즈 컨테이너 34Extensible Runtime Containment and Server Protocol for JavaBeans 19.3.1. 실행 환경의 자바빈즈 컨테이너, 빈컨텍스트 34BeanContext class 19.3.2. 빈컨텍스트의 서비스 지원 42BeanContextServices class 맺음말 54 제 20 장 객체 직렬화 1Object Serialization 20.1. 객체 직렬화 1 20.1.1. 직렬화 가능한 객체 2 20.1.2. Serializable 인터페이스의 사용 2Serializable interface 20.1.2.1. Serializable 인터페이스 선언 2 20.1.2.2. 직렬화 가능한 필드 표시 2 20.1.2.3. 부모 클래스로부터 상속한 객체 상태 정보의 직렬화 2 20.1.2.4. readObject/writeObject 메소드 선언 3 20.1.3. Serializable 인터페이스 사용 예제 3 20.1.4. Externalizable 인터페이스의 사용 11Externalizable interface 20.1.4.1. Externalizable 인터페이스의 선언 11 20.1.4.2. 기본 생성자 11 20.1.5. Externalizable 인터페이스 사용 예제 12 20.2. 버전 관리 16 20.3. 객체 스트림 23Object Stream 20.3.1. 객체 스트림의 형식 23 20.3.2. 커스텀 객체 스트림 25 맺음말 26 제 21 장 버퍼 입출력 프로그래밍 1java.nio package 21.1. 채널과 버퍼 1Buffer class 21.1.1. 버퍼의 동작 방식 1 21.1.2. 채널과 버퍼 4Channel and Buffer 21.1.3. 버퍼의 바이트 순서 7 21.1.4. 파일 잠금 9FileLock 21.1.5. 메모리맵 파일 13MappedByteBuffer class 21.1.6. 파일 채널 전송 15channel transfer 21.2. 버퍼와 문자셋 17CharsetEncoder and CharsetDecoder 21.3. 넌블로킹 소켓 입출력 24non-blocking socket I/O 21.3.1. 소켓 채널의 넌블로킹 모드 24 21.3.2. 입출력 멀티플렉싱 36SelectableChannel class 맺음말 42 제 22 장 테스트와 튜닝 1 22.1. ant 빌드 도구 1Ant 22.1.1. ant 프로그램 설치 2 22.1.2. ant를 사용한 컴파일 방법 3 22.2. JUnit 테스트 도구 8JUnit 22.2.1. JUnit을 사용한 클래스 테스트 9 22.3. 수행 성능 개선과 최적화 17 22.3.1. 프로파일링 18 22.3.2. 최적화 방법 19 맺음말 21 3부 자바 세계의 확장 제 23장 XML 처리 1XML, JAXP 23.1. XML 문법 1 23.1.1. XML 문서의 구성 요소 1 23.1.2. DTD 정의 5 23.2. XML 파싱 8 23.2.1. SAX 파서 9 23.2.2. DOM 파서 16 23.2.3. 보증된 표준 라이브러리와 외부 XML 패키지 사용 25endorsed standard library 22.2.4. DOM API를 사용하여 XML 문서 만들기 27writing xml documents 23.3. XML 스키마 30XML Schema 23.4. XSL 변환 35XSL Transforms 23.4.1. XSLT 문서 작성 35 23.4.2. JAXP API를 사용한 XSL 변환 40
XML에 관한 몇 가지 팁
을 계속 갱신하고 있습니다.
- by yoonforh 2004-05-05 00:06:04
맺음말 44 제 24 장 데이터베이스 연결 1JDBC 24.1. JDBC를 사용한 데이터베이스 연결 1 24.1.1. JDBC 드라이버 1 24.1.2. 데이터베이스에 연결하기 2 24.1.2.1. DriverManager를 사용한 연결 2 24.1.2.2. DataSource를 사용한 연결 5 24.2. SQL 문의 실행 6 24.2.1. Statement 7 24.2.2. ResultSet 16 24.2.3. 커서와 갱신 가능한 ResultSet 18 24.2.4. 메타 정보 24 24.2.5. 배치 처리 25 24.2.6. 자동 생성 키 처리 27 24.2.7. BLOB/CLOB의 처리 29 24.3. 트랜잭션 37transaction 24.3.1. 트랜잭션과 저장점 37 24.3.2. 트랜잭션 고립 수준 39 24.3.3. 분산 트랜잭션 40 24.4. RowSet 42RowSet interface 맺음말 44 제 25 장 C/C++와의 대화 1Java Native Interface, JNI 25.1. native 자바 메소드의 구현 1 25.1.1. 라이브러리 적재 1 25.1.2. native 메소드 구현 방법 3 25.1.3. 가비지 컬렉션과 객체 참조 14 25.1.4. 배열 처리 함수 15 25.1.5. 쓰레드와 동기화 16 25.2. 자바 가상 머신 구동 API 17JVM invocation API 25.3. AWT 네이티브 인터페이스 24AWT Native Interface 맺음말 30 제 26 장 보안 1Security 26.1. 자바 보안 모델 1Java Security Model 26.1.1. 보호 도메인과 자바 보안 모델 1Protection Domain 26.1.2. 보안 관리자와 보안 정책 파일 3 26.1.3. 접근 제어 알고리즘과 특권 액션 7Access Control and PrivilegedAction
팁 : AccessController.doPrivileged(new PrivilegedAction() { ...}, null);의 특별한 의미 - by yoonforh 2004-05-05 00:06:04 책 1000page에 보면 Subject 클래스의 doAsPrivileged(Subject, PrivilegedAction, AccessControlContext) 메소드에서 AccessControlContext 인자를 null로 줄 때의 특별한 의미에 대해 언급하였다. 이것은 AccessController 클래스의 doPrivileged(PrivilegedAction, AccessControlContext) 메소드에도 동일하게 적용된다. 책의 내용을 다시 옮기면, 접근 제어 문맥은 코드의 원천 정보를 포함한 보호 도메인 정보를 나타내므로 AccessControllerContext 인자를 가지는 doAsPrivileged() 메소드 혹은 doPrivileged() 메소드를 사용하면 특정 보호 도메인에 해당하는 접근 제어 문맥으로 특권 액션을 실행할 수 있다. 현재의 접근 제어 문맥에 가해진 제한 없이 특권 액션을 실행하기 위해 접근 제어 문맥 인자를 null로 지정하는 방법이 종종 사용된다.
26.2. 암호화와 인증 13Cryptography and Authentication 26.2.1. 보안 기술의 개념과 종류 13 26.2.2. 암호화 아키텍처 15JCA, JCE 26.2.3. 암호화 키 관리 26KeyStore 26.2.4. 인증과 권한 부여 32JAAS 26.2.4.1. Subject 클래스 32 26.2.4.2. 로그인 인증 33Login 26.2.4.3. 권한 부여 35authorization 26.3. 보안 소켓 통신 41JSSE 26.3.1. SSL 규약 41SSL 26.3.2. SSL 지원하는 소켓 생성 43SSLSocket 26.3.3. SSL 소켓 예제 프로그램 45 26.3.3.1. 키와 인증서 생성 45Certificate 26.3.3.2. SSL 기반 채팅 서버/클라이언트 49
팁 : Non-Blocking SSL Socket의 구현 - by yoonforh 2004-05-05 21:30:47 JDK 1.4에서는 채널 방식의 SSLSocket이 지원되지 않고, SSLSocket의 경우, InputStream에서 available() 메소드를 호출해도 항상 0을 return한다. 이것은 read()를 호출해야만 decrypt를 하는 방식으로 구현되어 있기 때문에 decrypt된 가용 바이트 수를 반환하는 available() 메소드의 의미 상 항상 0이 될수밖에 없다. JDK 1.5에서는 SSL Socket에서도 채널 방식의 넌블로킹 모드를 지원할 예정이다. JDK 1.4의 경우, 다음과 같은 API를 지원하는 방법을 사용하여 넌블로킹 모드를 흉내낼 수 있다. 책의 9장에서 InputStream의 available()과 read()를 사용하여 일반 소켓 스트림으로 NIO 사용하지 않고 넌블로킹 소켓을 만드는 방법을 소개했는데, 그와 유사하지만 available() 메소드가 제대로 동작하지 않으므로, 새로운 방법을 고민하는 셈이다. private static final int VERY_SHORT_INTERVAL_IN_MS = 10; /** * Checks for a connection by attempting to read only one byte * * @return first byte read * or -1 if met end of stream * or -2 if no available data */ protected int available(Socket s, InputStream is) throws IOException { /* Store the current timeout */ int to = s.getSoTimeout(); int result = -1; /* set a new timeout to a very short amount of time */ s.setSoTimeout(VERY_SHORT_INTERVAL_IN_MS); try { // attempt to read one byte result = is.read(); } catch (SocketTimeoutException e) { // no available data result = -2; } finally { // restore original timeout s.setSoTimeout(to); } return result; }
맺음말 57 제 27 장 네이밍과 디렉토리 인터페이스 1JNDI 27.1. JNDI API 1 27.1.1. 네이밍 2 27.1.1.1. 네이밍 연산 2 27.1.1.2. JNDI에서의 이름 7 27.1.2. 디렉토리와 LDAP 7LDAP 27.1.2.1. 디렉토리 연산 8 27.1.2.2. LDAP 서버와의 통신 11 27.1.2.3. LDAP 검색 18 27.1.3. 이벤트 처리 20 27.1.4. JNDI의 URL 27 27.2. JNDI 서비스 제공자 28JNDI Service Provider 27.2.1. DNS 서비스 제공자 28 27.2.2. JNDI 서비스 제공자 만들기 30 맺음말 51 제 28 장 분산 객체 통신 1 28.1. 자바 원격 메소드 호출 1Java RMI 28.1.1. 자바 RMI의 분산 객체 모델 3 28.1.1.1. 원격 인터페이스 5 28.1.1.2. 원격 객체의 구현 6 28.1.1.3. 원격 객체 익스포트 8 28.1.1.4. 메소드 인자 전달 방식 9 28.1.1.5. 원격지 코드 다운로드 10 28.1.1.6. RMI 네이밍 12 28.1.1.7. RMI에 대한 몇 가지 13 28.1.1.8. 콜백 구조 15callback 28.1.2. RMI 예제 - 극장 예매 시스템 15 28.1.2.1. 원격 인터페이스 작성 15 28.1.2.2. 원격 객체 구현 24 28.1.2.3. RMI 네이밍 사용 31 28.1.2.4. RMI 컴파일러를 사용한 스텁 클래스 생성 33 28.1.2.5. 서버와 클라이언트, 그리고 원격 스텁 jar 아카이브 34 28.1.2.6. 서버와 클라이언트의 보안 정책 파일 35 28.1.2.7. 프로그램 실행 36 28.1.3. RMI 원격 객체 활성화 37RMI Activation 28.1.3.1. 원격 객체 활성화 규약 37 28.1.3.2. 객체 활성화를 지원하는 원격 객체 구현 38 28.1.3.3. 활성 가능 원격 객체의 등록 및 익스포트 40 28.1.3.4. 극장 예매 시스템 예제의 활성화 구현 41 28.2. CORBA 45 28.2.1. CORBA와 IDL 46CORBA, IDL 28.2.1.1. IDL의 선언 47 28.2.1.2. idlj를 사용한 IDL 파일 컴파일 52 28.2.1.3. IDL이 생성한 원격 인터페이스 구현 54 28.2.1.4. COS 네이밍 사용 59 28.2.1.5. ORB 디먼과 프로그램 실행 63 28.2.1.6. ORB 디먼의 퍼시스턴스 지원 64 28.2.2. RMI-IIOP 65RMI over IIOP 28.2.2.1. RMI-IIOP와 RMI의 비교 65 28.2.2.2. 원격 인터페이스 선언과 원격 객체 구현 66 28.2.2.3. COS 네이밍 사용 67 28.2.2.4. RMI 컴파일러를 사용한 Tie 클래스와 스텁 클래스 생성 71 28.2.2.5. ORB 디먼과 프로그램 실행 72 맺음말 73 제 29 장 웹 기반 클라이언트 프로그래밍 1 29.1. 애플릿 1Applet 29.1.1. 자바 애플릿 이력 1 29.1.2. 애플릿의 생애 주기 2 29.1.3. 애플릿 작성하기 4 29.1.4. 애플릿 태그 19 29.1.4.1 <applet> 태그 20 29.1.4.2. <object>와 <embed> 태그의 사용 21 29.1.5. 애플릿 보안 모델과 애플릿 서명 24Jar signing 29.1.6. 애플릿과 자바스크립트의 통신 31 29.1.6.1. 자바스크립트에서 자바 애플릿 메소드 호출 32 29.1.6.2. 자바 애플릿에서 자바스크립트 호출 32 29.1.6.3. 자바 애플릿에서 HTML 문서의 DOM 접근 33 29.1.6.4. 애플릿, 자바스크립트 통신 예제 33 29.2. 자바 웹 스타트 39Java Web Start 29.2.1. 자바 웹 스타트 구조 39 29.2.2. 자바 웹 스타트의 보안 모델 41 29.2.3. JNLP 문서 41 29.2.4. 자바 웹 스타트를 사용한 배포 42 29.2.5. 서비스 API 활용 45Java Web Start Service API 맺음말 60
샘플 장 - 독자 서평 - 책 목차 및 팁 - 유용한 예제 색인

유용한 예제 색인

예제 내용설명위치
시스템 속성 출력java.util.Properties와 시스템 속성 사용법4장, 105쪽
가용 메모리 출력런타임 사용 메모리4장, 108쪽
외부 프로세스 실행Runtime의 exec 사용4장, 110쪽
종료 시 윈도우 상태 기억하기AWT에서 window state 저장 및 복원6장, 189쪽
stop/suspend/resume 구현Thread 클래스의 stop/suspend/resume 메소드 대체 구현7장, 216쪽
유니코드 메모장문자셋 인코딩 처리하는 메모장8장, 244쪽
URL로부터 파일 다운로드URLConnection과 HTTP Basic Authentication 처리(Authenticator 구현)9장, 261쪽
URL로 파일 업로드URLConnection 사용하여 FTP 혹은 mail로 파일 전송9장, 265쪽
커스텀 URL 스트림 핸들러사용자 URL scheme 및 핸들러 작성9장, 270쪽
채팅 서버/클라이언트Socket 스트림 사용 예제9장, 279쪽
넌블로킹 채팅 서버java.io 패키지에서 넌블로킹 에뮬레이션9장, 292쪽
시스템 네트웍 장치 정보 출력NetworkInterface 정보 출력9장, 297쪽
커스텀 스윙 컴포넌트MVC 구조에 따른 커스텀 스윙 컴포넌트 작성10장, 333쪽
이미지 애니메이션쓰레드과 이미지 이중 버퍼를 사용한 간단한 애니메이션11장, 352쪽
2D 드로잉 프로그램2D 그래픽을 활용한 MVC 구조의 간단한 드로잉 프로그램11장, 364쪽
커스텀 클래스로더Jar 파일에 정의된 클래스를 적재하는 사용자 정의 클래스로더13장, 433쪽
Dynamic Proxy AWT Event ListenerDynamic Proxy로 구현하는 AWT Event Listener13장, 454쪽
SoftReference를 활용한 이미지 캐싱SoftReference를 활용한 이미지 파일 캐싱13장, 461쪽
LRU 캐시 구조LinkedHashMap을 활용한 LRU 캐시 구현14장, 492쪽
다중 쓰레드 Queue 구조다중 쓰레드 환경에서 사용할 수 있는 큐 구조 구현16장, 532쪽
Barrier 구조다중 쓰레드 환경에서 사용할 수 있는 Barrier 구조 구현16장, 538쪽
Semaphore 구조다중 쓰레드 환경에서 사용할 수 있는 Semaphore 구조 구현16장, 544쪽
Read/Write Lock 구조다중 쓰레드 환경에서 사용할 수 있는 Read/Write Lock 구조 구현16장, 551쪽
쓰레드별 데이터ThreadLocal을 사용한 쓰레드별 자료 저장16장, 560쪽
사용자 정의 Transferable드랙앤드롭에서 사용하기 위한 사용자 정의 Transferable17장, 583쪽
AWT 드랙앤드롭AWT 시스템에서 구현하는 드랙앤드롭17장, 591쪽
스윙 드랙앤드롭스윙 프레임웍의 기능을 활용한 드랙앤드롭17장, 605쪽
스윙 Undo/Redo스윙 프레임웍의 Undo/Redo 기능을 활용17장, 615쪽
TextLayout을 사용한 마우스 Hit TestTextLayout를 활용한 문장 디스플레이 및 캐럿 처리18장, 643쪽
다국어 입력 처리InputMethodEvent 처리하여 다국어 입력 구현 예제18장, 655쪽
인쇄 서비스 지원Graphics2D를 지원하는 인쇄 처리18장, 675쪽
자바빈즈 컴포넌트 예제자바빈즈 컴포넌트 작성 예제19장, 712쪽
런타임 자바빈즈 컨테이너 예제BeanContext를 구현한 런타임 자바빈즈 컨테이너 작성 예제19장, 730쪽
Externalizable 예제Externalizable을 구현한 직렬화 가능 객체 예제20장, 759쪽
Serialziable 버전 지원직렬화 가능 객체의 버전 지원 예제20장, 765쪽
NIO 파일 복사java.nio 패키지의 채널, 메모리맵, 채널 전송을 각각 사용한 파일 복사 예제들21장, 780/789/791쪽
파일 잠금을 사용한 단일 프로그램 인스턴스 보장FileLock을 사용하여 동시에 같은 프로그램이 실행되지 않도록 막는 예제21장, 785쪽
문자셋 인코딩 변환스트림 방식과 NIO 방식을 각각 사용한 문자셋 인코딩 변환 예제21장, 797쪽
넌블로킹 소켓 채팅 서버NIO 소켓 채널의 넌블로킹 모드를 활용한 소켓 채팅 서버21장, 800쪽
Selectable 소켓 채팅 서버NIO Selector를 활용한 멀티플렉싱 소켓 채팅 서버21장, 813쪽
XSLT 사용 예제JAXP API를 사용한 XSLT 실행 예제23장, 886쪽
오러클에서 BLOB 사용 예제오러클 JDBC 드라이버를 사용한 BLOB 처리 예제24장, 921쪽
윈도우 메모리 상태JNI를 사용하여 윈도우 시스템의 메모리와 디스크 공간 정보를 보여주는 예제25장, 941쪽
자바 프로그램 실행하는 윈도우 프로그램 작성JNI의 JVM 호출 API를 사용하여 자바 프로그램을 실행하는 윈도우 프로그램 작성 예제25장, 955쪽
AWT Native Interface 예제AWT의 렌더링 부분을 네이티브로 구현하는 AWT Native Interface 예제25장, 961쪽
PrivilegedAction 예제PrivilegedAction을 사용한 접근 제어 예제26장, 977쪽
패스워드 저장 및 검증 예제DES 암호화 알고리즘을 사용한 패스워드 저장 및 검증 예제26장, 984쪽
KeyStore에 암호화 키 저장 예제KeyStore에 DES 암호화 키 저장하는 예제26장, 995쪽
윈도우 NT 로그인 모듈을 사용한 권한 인가 예제NT 로그인 모듈을 사용하여 권한을 인가하는 예제26장, 1002쪽
보안 소켓(SSL Socket)을 사용한 채팅 서버/클라이언트SSL Socket을 사용하여 상호 인증하는 채팅 서버/클라이언트 구현 예제26장, 1011쪽
LDAP 이벤트 처리JNDI에서 LDAP의 NamingEvent를 처리하는 예제27장, 1044쪽
메모리 JNDI 서비스 제공자메모리의 해시테이블에 이름과 엔트리를 저장하는 JNDI 서비스 제공자 작성 예제27장, 1053쪽
실시간 극장 예매 시스템콜백을 지원하는 실시간 극장 좌석 예매 시스템을 RMI, CORBA, RMI-IIOP 등 분산 객체 통신 기술을 사용하여 각각 구현.28장, 1089/1121/1138쪽
이미지 애니메이션 애플릿쓰레드 방식의 애니메이션 기법을 사용한 간단한 애플릿29장, 1152쪽
전자 서명된 애플릿애플릿 jar 파일을 전자 서명하여 애플릿의 sandbox 보안 모델을 벗어나는 일을 하는 예제29장, 1168쪽
애플릿과 자바스크립트 통신애플릿을 포함한 HTML 문서와 애플릿이 각각 스크립트와 메소드 호출을 사용하여 통신하는 예제29장, 1177쪽
웹스타트 메모장 프로그램자바 웹스타트의 JNLP 서비스 API를 사용하여 파일 시스템에 접근하는 웹 스타트 메모장 프로그램29장, 1189쪽

Yoon Kyung Koo <yoonforh at yahoo dot com>
이 페이지는 2002년 9월 8일에 처음 만들어졌습니다.
Last modified: Mon Dec 13 04:11:21 +0900 2004