Chapter 01 도대체 Java가 뭐야? ... 18 01 세계 최초로 성공한 가상 컴퓨터 명세 ... 22 02 소프트웨어로 가상 컴퓨터를 실현한다 ... 23 03 커피잔은 명세의 증거 ... 25 04 세계 최초는 아니지만 성공 예로서는 세계 최초 ... 27 05 여러 컴퓨터에서 소프트웨어가 실행 가능 ... 28 06 Java 자신이 OS로서의 기능을 정의하고 있다 ... 31 07 순수한 객체 지향 ... 33 08 확장 가능한 명세의 집합체 ... 35 09 기업에 필요한 기능이 탑재되어 있다 ... 37 10 많은 기업이 지지하는 오픈된 명세 ... 39 COLUMN - 여러 가지 Java 이야기 ① 빨리 보는 Java 역사 ... 42 Chapter 02 모든 하드웨어를 동일하게 취급한다 ... 44 01 소프트웨어 이식은 오랜 고민의 원인 ... 48 02 넘어야 하는 두 개의 벽 ... 50 03 컴퓨터는 '주판'으로 생각하면 알기 쉽다 ... 51 04 소프트웨어를 사람의 말로 생각해 본다 ... 53 05 기계어는 컴퓨터의 종류에 따라 다르다 ... 54 06 어셈블리 언어에 의한 개발은 호환성이 전혀 없음 ... 56 07 고수준 언어로 소스 코드 호환이 가능해지다 ... 59 08 옛날에는 컴퓨터마다 컴파일러가 필요 ... 62 09 소스 코드 상태의 소프트웨어 유통 ... 63 10 인터프리터 언어와 스크립트 ... 66 11 인터프리터 언어의 한계 ... 68 12 Java 이전의 문제 ... 69 13 Java 가상 머신이라는 소프트웨어 ... 70 14 JVM의 특징 ... 72 15 Java 클래스는 바이너리로 배포 가능 ... 74 16 Unicode의 채택 ... 76 17 JIT 컴파일러/HotSpot 기술 ... 78 COLUMN - 여러 가지 Java 이야기 ② 여러 가지 아키텍처 ... 80 Chapter 03 모든 OS를 동일하게 취급한다 ... 82 01 또 하나의 벽 ... 86 02 소프트웨어는 OS별로 존재한다 ... 87 03 OS는 하드웨어를 중개한다 ... 89 04 OS마다 소스 코드는 다르다 : API의 차이 ... 92 05 고기능 API의 차이 ... 95 06 '표준 OS' 및 '표준 API'라는 시도 ... 97 07 공통 라이브러리의 시도 ... 100 08 소스 코드 호환만으로는 아직 문제는 해결 안 된다 ... 103 09 클래스 라이브러리가 비호환 ... 104 10 헤더 파일마다 소스 코드가 필요 ... 105 11 종래의 문제 ... 107 12 JVM은 OS도 포함하고 있다 ... 108 13 애플리케이션이 직접 건드리지 않는 것은 OS에 맡긴다 ... 110 14 애플리케이션이 직접 액세스하는 것은 공통화 ... 111 15 Java는 모든 것이 클래스 파일 ... 113 16 클래스 파일만 있으면 재사용 가능 ... 115 17 객체 지향 관련 기능도 표준으로 제공 ... 117 18 공통으로 가질 수 없는 기능은 과감히 잘라 버림 ... 118 COLUMN - 여러 가지 Java 이야기 ③ 가상 컴퓨터의 시도 ... 122 Chapter 04 언어 명세 및 실행 환경과 함께 객체 지향을 추구 ... 124 01 Java는 객체 지향 언어의 최대 성공 예 ... 128 02 객체 지향의 4가지 주요 기능 ... 130 03 C++의 문제점 ... 137 04 C++의 문제점 ① : 클래스에 속하지 않는 메쏘드 ... 138 05 C++의 문제점 ② : 클래스의 재사용이 어려웠다 ... 141 06 C++의 문제점 ③ : 이름 충돌의 문제 ... 143 07 Java의 접근 방식 ... 146 08 클래스는 반드시 만들 것 ... 147 09 클래스에 소속되지 않는 메쏘드나 변수를 가질 수 없다 ... 150 10 모든 클래스가 main 메쏘드를 가질 수 있다 ... 151 11 패키지에 의한 이름 관리 ... 157 12 deprecated에 의해 권장되지 않는 메쏘드의 경고 ... 158 13 예외 처리에 따른 오류 처리 ... 159 14 클래스와 파일의 관계가 명확 ... 162 15 실행 파일을 만들지 않는다 ... 164 16 실행 프레임워크 ... 166 17 JVM은 객체 지향 컴퓨터 ... 167 COLUMN - 여러 가지 Java 이야기 ④ 컴포넌트란? ... 170 Chapter 05 메모리 관리를 자동화한다 ... 172 01 소프트웨어로 메모리를 관리한다는 것 ... 176 02 포인터를 사용하는 소프트웨어 ... 177 03 배열을 사용한다 ... 179 04 구조체 배열의 구조 ... 183 05 C 언어 포인터는 어렵다 ... 185 06 프로그램을 움직여 보면… ... 188 07 배열의 오버런 문제 ... 189 08 직접 해보자 ... 191 09 C 프로그램에서 메모리 내의 움직임 ... 195 10 메모리 리크라는 문제 ... 197 11 영역 파괴 ... 199 12 C 언어의 문제점 정리 ... 201 13 Java 메모리 관리의 기본 : 참조 ... 202 14 인스턴스의 생성은 어떻게 일어날까? ... 205 15 Java에서는 모든 객체를 힙에 둔다 ... 207 16 Java는 형 검사를 반드시 수행한다 ... 209 17 가비지 콜렉션 ... 211 18 Java의 스택 머신 ... 213 19 Java의 배열 ... 215 20 Java에서는 객체를 나열한 배열은 만들 수 없다 ... 217 21 배열 자체가 오브젝트 ... 219 22 Java에서는 배열의 오버런은 없다 ... 222 COLUMN - 여러 가지 Java 이야기 ⑤ 가상메모리 : 책상의 너비에는 한계가 있다 ... 224 Chapter 06 기업 시스템에 필요한 기능을 탑재 ... 226 01 도대체 왜 Java인 걸까? ... 230 02 호스트부터 클라이언트/서버로 ... 232 03 배포 문제 ... 234 04 다른 기종의 컴퓨터에 대한 지원 ... 236 05 자동 배포를 실현한다 ... 238 06 바이러스 활동을 금지한다 ... 240 07 바이러스를 넣지 않는 노력 : 디지털 서명 ... 242 08 Web 애플리케이션 기술 '서블릿' ... 245 09 객체 지향에 의한 부분 개발 ... 247 10 세션 관리 기능을 제공 ... 249 11 화면 디자인은 'JSP'로 작성 ... 251 12 MVC 모델을 실현 ... 253 13 'JSF'는 MVC형의 프레임워크 명세 ... 255 14 분산 트랜잭션을 실현하는 'EJB' ... 256 15 Web 서비스는 시스템 연계의 업계 표준 기술 ... 261 16 'J2EE'는 서버 기술의 집대성 ... 262 17 JWS(Java Web Start)로 자동 다운로드 ... 265 Chapter 07 오픈 테크놀러지의 의미 ... 268 01 소프트웨어를 공동으로 생산한다 ... 272 02 참가 각사의 동의로 결정되는 공통 명세 ... 274 03 오픈 소스를 보완하는 오픈 명세 ... 276 04 장래에 걸쳐 장기적으로 안심 ... 277 05 Java가 성공한 두 개의 분야 ... 279 06 소형 칩형 Java ... 280 07 기업 업무를 지지하는 J2EE ... 283 08 여러 형태의 클라이언트를 중앙 집권형으로 관리 ... 285 09 많은 사용자 액세스를 가능하게 ... 287 10 데이터베이스 애플리케이션을 효율 좋게 개발 ... 290 11 컴포넌트를 사용한 트랜잭션 관리 ... 292 12 대량 기능 요건도 부분, 분담, 변환 기술로 개발 ... 295 13 최적의 머신 환경을 선택하여 고속 쓰루풋을 실현 ... 298 14 Java는 독립된 작은 명세의 모음 ... 300 15 안심할 수 있는 RI ... 302 16 대형 개발업체가 '진심'이다 ... 303 17 최소 기술, 하지만 최고 기술 ... 305 Chapter 08 Java가 정말로 지향하는 것 ... 308 01 Java에 적극적으로 힘쓰려면 ... 312 02 개발 환경의 방향성 ... 315 03 데스크탑 환경은 복권할까? ... 316 04 Java가 정말로 지향하는 것 ... 319 INDEX ... 324