Top

The Java Language Specification, Third Edition (한국어판)

  • 원서명The Java™ Language Specification, Third Edition (ISBN 9780321246783)
  • 지은이James Gosling, Bill Joy, Guy Steele, Gilad Bracha
  • 옮긴이허진영, 최선재, 이상민, 이정룡
  • 감수자김형준
  • ISBN : 9788960770072
  • 36,000원
  • 2008년 01월 02일 펴냄 (절판)
  • 페이퍼백 | 704쪽 | 188*255mm

판매처

  • 현재 이 도서는 구매할 수 없습니다.

책 소개

『The Java™ Language Specification, Third Edition』은 자바 언어를 만든 사람들이 직접 작성했으며, 자바 프로그래밍 언어의 기술 참고서적의 결정판이다.
언어 구조에 대한 정확한 의미를 알고자 하는 독자라면 이 책은 분명 훌륭한 지침서가 될 것이다.
이 책은 자바 프로그래밍 언어에 대한 완벽하고 정확하며 상세한 설명을 제공한다. 또한 2판 이후 새롭게 추가된 기능인 제네릭, 어노테이션, 단언문, 박싱/언박싱, 열거형, for-each 구문, 가변 길이 매개변수를 포함하는 메소드, 정적 임포트 등에 대한 완벽한 설명을 제공한다.


[ 책 소개 ]

자바 프로그래밍 언어는 범용적이고 병렬 수행이 가능한 클래스 기반의 객체지향 언어로, 많은 프로그래머들이 언어를 능숙하게 다룰 수 있도록 매우 단순하게 설계되었다. 자바 프로그래밍 언어는 C나 C++와 관련이 있지만 다소 다르게 체계화되었다. C와 C++의 일부 요소는 제외되었고, 다른 언어의 사상도 일부 포함되었다. 자바는 연구용 언어가 아니고 상용 언어이다. 호어(C. A. R. Hoare)가 발표한 언어 설계에 대한 논문을 토대로 최신 기술이나 검증되지 않은 부분은 배제했다.

자바 프로그래밍 언어는 타입에 대한 규칙이 엄격하다. 따라서 컴파일 시 에러(컴파일할 때 확인할 수 있으며 반드시 검증해야 하는 에러)와 실행 시 발생하는 에러를 확실히 구분한다. 컴파일은 프로그램을 CPU와 같은 하드웨어 아키텍처에 독립적인 바이트 코드 형태로 번역하는 작업을 의미한다. 실행은 프로그램을 수행하기 위해서 필요한 클래스를 로딩하고 링크하며, 선택적으로 기계어를 생성하고 동적으로 프로그램을 최적화하고, 프로그램을 수행하는 작업을 의미한다.

자바 프로그래밍 언어는 기계 표현의 세부 내용이 드러나지 않는 고급 언어이다. 명시적인 메모리 해제(C의 free나 C++의 delete와 같은) 작업 시 일어날 수 있는 문제를 피하기 위해서 가비지 콜렉터(GC, Garbage Collector)라는 자동 메모리 관리 기능을 사용한다. 실행 시 멈추는 현상을 최소화 하도록 고성능 가비지 콜렉터를 구현하여 시스템 프로그래밍과 실시간 응용 프로그램을 지원할 수 있다. 자바는 프로그램이 지정되지 않은 방식으로 수행되는 것을 방지하는 구조이다. 예를 들면 인덱스 점검을 하지 않고 배열에 접근하는 작업은 불가능하다.

자바 프로그래밍 언어는 일반적으로 바이트 코드 명령어 집합과 바이너리 형식으로 컴파일 된다. 이에 대한 내용은 『The Java™ Virtual Machine Specification, Second Edition』 (Addison-Wesley, 1999)에 잘 정리되어 있다.


[ 이 책의 구성 ]

2장에서는 자바의 어휘 및 구문 문법을 표현하기 위한 표기법(notation)에 대해서 설명한다.
3장에서는 C와 C++에 기반을 둔 자바 언어의 어휘 구조에 대해서 설명한다.
4장에서는 타입, 값, 변수에 대해서 설명한다.
5장에서는 형변환 및 수치 확장에 대해서 설명한다.
6장에서는 선언과 명명규칙, 의미 있는 이름을 정하는 방법에 대해서 설명한다.
7장에서는 패키지로 구성되는 프로그램의 구조에 대해 설명한다.
8장에서는 클래스에 대해서 알아본다.
9장에서는 인터페이스 타입에 대해서 알아본다.
10장에서는 배열에 대해 설명한다.
11장에서는 예외에 대해서 다룬다.
12장에서는 프로그램 수행 시 일어나는 동작에 대해서 알아본다.
13장에서는 바이너리 호환성에 대해서 알아본다.
14장에는 C와 C++에 기반을 둔 블록과 문장에 대해서 알아본다.
15장에서는 표현식에 대해 알아본다.
16장에서는 자바 언어에서 지역변수가 사용되기 전에 초기화 되어야 하는 것을 보장하는 방법에 대해서 자세히 다룬다.
17장에서는 Mesa라는 모니터 기반 병행처리 프로그래밍 언어에 기초한 스레드(thread)와 잠금(lock)에 대해서 알아본다.
18장에서는 구문 문법을 정리한다.

저자/역자 소개

[ 저자 소개 ]

JAMES GOSLING
썬 사의 개발 생산성 그룹의 CTO 겸 펠로우로서, 자바 프로그래밍 언어의 창시자이자 컴퓨터 산업의 가장 주목받는 프로그래머라고 할 수 있다. 1996년 “Programming Excellence Award”의 수상자이며, 과거 카네기 멜론 대학에서 수행한 Andrew 프로젝트로 박사학위를 받았으며, 썬의 네트워크 확장 윈도우 시스템인 NeWS를 개발했다.

BILL JOY
썬 마이크로시스템즈의 공동 설립자이며, 하드웨어와 소프트웨어의 아키텍트로 일하면서 2003년 9월까지 회사의 기술 전략을 이끌었다. UNIXㅤㅈㅣㄼ의 버클리 버전 창시자로 잘 알려져 있으며 이를 통해 1993년 USENIX로부터 lifetime achievement award를 수상했다. 또한 1986년에 ACM Grace Murray Hopper Award를 수상했으며, 자바 프로그래밍 언어를 구현하는 데 중요한 역할을 수행하였다. 2005년 1월에는 KPCB의 파트너가 되었다.

GUY L. STEELE JR.
썬 마이크로시스템즈 연구소의 썬 펠로우이자, 언어 설계 및 구현, 병렬 알고리즘, 컴퓨터 수학 연구에 대한 책임을 맡고 있다. Scheme 프로그래밍 언어의 공동 창시자이며 저서로는 『C programming language』(Samuel Harbison 공저), 『Common Lisp programming language』가 있다. 1988년 ACM Grace Murray Hopper Award를 수상했으며, 1994년 ACM, 2001년에는 National Academy of Engineering, 2002년에는 American Academy of Arts and Science의 정식 회원이 되었다. 또한 1996년 ACM SIGPLAN Programming Laguages Achievement Award를, 2005년에는 Dr.Dobb’s Journal의 Excellence in Programming Award를 수상했다.

GILAD BRACHA
썬 마이크로시스템즈에서 컴퓨터 논리이론가로 근무하며 객체지향언어 영역의 연구를 수행하고 있다. 썬 근무 이전에는 Strongtalk,™ the Animorphic Smalltalk System에서 근무했다. 이스라엘의 Ben Gurion 대학에서 수학과 컴퓨터 과학에 관한 학위를 받았으며, University of Utah에서 컴퓨터 과학 박사학위를 받았다.


[ 저자 서문 ]

자바 프로그래밍 언어는 James Gosling이 소비자용 전자 제품의 임베디드 애플리케이션을 개발하기 위해 설계한 언어인 Oak에서 시작되었다. 몇 년 후 이 언어에 대한 사용 경험과 Ed Frank, Patrick Naughton, Jonathan Payne, Chris Warth의 기여를 통해 인터넷을 주 대상으로 하게 되었고 이름도 바뀌었으며, 이 명세서에 따라 수정되었다. 이 언어의 최종 형태는 Graham Hamilton, Tim Lindholm 등 다른 펠로우들의 도움으로 James Gosling, Bill Joy, Guy Steele, Richard Tuck, Frank Yellin, Arthur van Hoff에 의해 정의되었다.

자바 프로그래밍 언어는 범용 클래스 기반의 객체 지향 프로그래밍 언어로서 특히 구현체와의 의존도를 가능한 낮추도록 설계되었다. 따라서 애플리케이션 개발자들은 한 번만 프로그램을 만들어서 인터넷 상의 어디에서나 실행할 수 있게 되었다.

이 책은 자바의 구문과 의미론에 대한 명세를 제공한다. 여기에 모든 언어 구성체의 동작에 대해 명시할 것이며, 따라서 모든 구현체가 동일한 프로그램을 실행할 수 있도록 할 것이다. 시간에 종속적이거나 결정이 불가능한 경우를 제외하고 충분한 시간과 메모리 공간이 주어진다면 자바 프로그래밍 언어로 작성된 프로그램은 모든 기계와 자바 구현체에서 같은 결과를 가져야 한다.

자바 프로그래밍 언어는 이미 널리 사용될 준비가 되어 있는 성숙한 언어이다. 그럼에도 우리는 다가올 수년 안에 이 언어가 어느 정도 진화하길 기대하고 있으며 기존에 작성된 애플리케이션과 완전히 호환되도록 언어를 진화시킬 것이다. 이를 위해 언어의 새로운 버전을 상대적으로 적게 만들 것이며, 컴파일러와 시스템은 여러 버전의 자바 언어를 지원할 것이다.

이미 많은 연구와 실험이 자바 플랫폼으로 진행 중에 있다. 우리는 이런 작업을 장려하고 자바 언어와 플랫폼의 향상을 위해 외부의 단체들과 계속해서 협력해 나갈 것이다. 일례로 우리는 매개변수화 타입을 위해 몇 가지 흥미로운 제안을 받기도 했다. 기술적으로 어려운 영역에서 이와 같은 협업은 매우 중요하다.

『The C Programming Language』를 쓴 Brian Kernighan과 Dennis Ritchie는 그들의 책에서 C 언어는 “사용 경험이 증가할수록 더 다루기 쉬워짐”을 느꼈다고 한다. C를 좋아한다면 자바 프로그래밍 언어도 좋아하리라 생각하며, 자바 또한 능숙해지기를 바란다.

J1996년 7월
캘리포니아 쿠퍼티노에서 James Gosling
콜로라도 애스펜에서 Bill Joy
매사추세츠 쳄스퍼드에서 Guy Steele


[ 2판 저자 서문 ]

지난 수년 동안 자바 프로그래밍 언어는 전례 없는 성공을 거두었고, 이 성공은 새로운 도전을 불러왔다. 이 폭발적인 성공에 따라, 언어와 라이브러리에 대한 수요는 폭발적으로 늘어났다. 이 도전을 통해 자바는 잘 성장했고(운 좋게도 별탈없이) 현재 많은 라이브러리를 가지고 있다.

『The Java™ Language Specification』의 2판은 이런 발전된 모습을 반영하며 1996년 초판 발행 이후 이루어진 많은 자바 프로그래밍 언어의 변화를 통합했다. 이러한 변화의 대부분은 1997년 자바 플랫폼 1.1의 발표를 통해 생겨났고 중첩 타입 선언의 추가에 초점을 두고 이루어졌다. 이 후 발생한 변경으로는 부동소수점 연산과 관련된 것이 있다. 또한 2판에서는 메소드 룩업과 바이너리 호환성과 관련하여 중요한 설명과 개정이 포함되었다.

이번 명세서는 최근의 자바 언어를 정의했다. 자바 프로그래밍 언어는 계속해서 진화하고 있다. 이 글을 쓰는 동안에도 제네릭 타입(generic type)과 단언(assertions)을 통해 언어를 확대하고 메모리 모델을 정제하는 것과 같은 연구가 Java Community Process를 통해 진행 중이다. 그러나 이런 노력들이 결실을 이룰 때까지 2판의 발행을 미루는 것은 옳지 않다고 여겼다.

라이브러리는 이제 너무 크고 계속해서 진화를 하기 때문에 이 책에서 라이브러리를 다루기에는 분량이 부족하다. 따라서 API의 상세한 설명은 이 책에서는 제외했다. 라이브러리의 상세한 설명은 java.sun.com의 웹사이트에서 볼 수 있고, 이번 명세서는 자바 프로그래밍 언어에만 집중하였다.

궁금한 점이 있는 독자들은 jls@java.sun.com으로 이 책에 대한 의견을 보내기를 바란다. 최신의 자바 플랫폼에 대해 배우고 싶거나 최근 자바 SDK 릴리즈를 다운 받으려면 http://java.sun.com을 방문하면 된다. 『The Java™ Language Specfication』 2판의 오류를 포함해 자바 시리즈에 대한 업데이트된 정보나 곧 나올 책의 프리뷰도 http://java.sun.com/Series에서 볼 수 있다.

2000년 4월
캘리포니아 로스 알토스에서 Gilad Bracha


[ 3판 저자 서문 ]

『The Java™ Programming Language Specification』 3판은 자바 언어 역사에 있어서 가장 큰 변화를 소개한다. 제네릭(Generic), 어노테이션(annotation), 단언문(assert), 박싱/언박싱(autoboxing/unboxing), 열거형 타입(enum type), for-each 구문, 가변 길이 매개변수를 갖는 메소드, 정적 임포트(static imports)는 모두 최근에 자바 언어에 더해진 것들이다. 단언문만 빼면 모두 2004년 가을 5.0 릴리즈에 포함된 사항들이다.

『The Java™ Programming Language Specification』 3판은 이런 내용들을 반영해, 2000년에 발행된 2판 이후에 있었던 모든 자바 프로그래밍 언어의 변화들을 통합했다.

자바는 지난 4년 동안 많은 성장을 이루었다. 불행하게도 이와 같은 성장은 단지 계속해서 크기만 커졌지 상업적으로 성공한 프로그래밍 언어를 주춤하게 했다. 호환성의 제한, 다양한 사용 요구, 사용자들의 충돌을 감안하면서 이같은 성장을 이루는 것은 쉬운 일이 아니다. 이 도전이 성공하기를 희망할 뿐이며 결과는 시간이 말해줄 것이다.

독자들은 jls@java.sun.com에 의견을 보낼 수 있다. 최신 자바 플랫폼에 대해 배우려 하거나 최근 J2SE 릴리즈를 다운 받으려면 http://java.sun.com을 방문하면 된다. 『The Java™ Language Specfication』 3판의 오류를 포함하여 자바 시리즈에 대한 업데이트된 정보나 곧 나올 책의 프리뷰도 http://java.sun.com/Series에서 볼 수 있다.

2005년 1월
캘리포니아 로스 알토스에서 Gilad Bracha


[ 역자 소개 ]

최선재 & 허진영
어느 순간 뒤돌아 보니 그냥 알던 학교 선배의 애 엄마가 되어있고, 역시나 어느 순간 그냥 알던 학교 후배의 애 아빠가 되어있는 결혼 4년차 개발 5년차 부부이다. 삼성 SDS에서 각자 금융과 제조/공공 분야의 여러 프로젝트를 여행했었고, 현재 한 명은 “윤호”라는 신규 제품을 릴리즈 후 튜닝 중이며 다른 한 명은 인생의 변곡점을 만들기 위해 모험 여행을 계획 중이다. 이들 부부의 가장 큰 꿈은 평화롭게 사는 것과 집에서 페어 프로그래밍 연습을 하면서 싸우지 않는 것.

이상민
1997년 삼성 SDS에 입사하여 현재 TA팀에서 연간 약 40개 프로젝트의 자바 성능 튜닝 및 성능테스트 업무를 수행하고 있다 . 자바 관련 자격증인 SCEA, SCBCD, SCWCD, SCJP를 보유하고 있으며, 사내 자바 커뮤니티의 마스터로 활동 중이다. 멀티캠퍼스 자바 관련 교재를 다수 집필하였으며 , 사내 강사 및 온라인 과정 튜터로도 활동하고 있다.

이정룡
연세대 화학공학과를 졸업하였으며, 현재 삼성 SDS에서 삼성 그룹웨어 시스템 개발 업무를 맡고 있다. 최근에는 기존시스템에 Enterprise2.0 개념을 도입하기 위해 웹오피스, 위키 등에 관심을 갖고 있다.


[ 역자 서문 ]

“스승님. 어느 정도 기본은 됐으니, 이제 자바의 고수로 가는 길을 알려주십시오.”
“자, 이 책을 마늘과 양파를 먹으며 정독하도록 하여라.”
“아니, 이 책은 Java Language Specification이 아닙니까? 저는 JVM 같은 시스템 소프트웨어엔 별 취미가 없습니다. 응용프로그램을 잘 만들고 싶으니 다른 책을 권해주십시오.”
“아니, 스노보드를 타면서 왜 무릎을 세우고 바닥이 아닌 진행 방향을 바라봐야 하는지, 어떤 원리에 의해 조정이 가능한지도 모르면서 하프파이프부터 먼저 타려 하는 것이 말이 된다고 생각하느냐?”
- 어느 스승과 제자의 대화

번역을 막 시작할 즈음 저희 역자들이 모여 『Java Language Specification, Third Edition』의 한국어판이 출간된다면 얼마나 팔릴까를 이야기 한 적이 있습니다. 다들 아마 출간되어도 많이 팔리지는 않을 것이라며, 자바 가상 머신 개발자나 혹은 그에 준하는 시스템 개발자, 프레임워크의 코어 모듈 개발자 등에게나 유용하지 일반 개발자에게는 그리 감명을 줄 수 없는 책이기 때문이라고 나름의 이유를 들었던 기억이 납니다. 하지만 이 책의 마지막 원고를 넘긴 지금, 저희 생각은 그때와는 완전히 달라져 있습니다. 절정 고수와 그냥 고수와의 간격은 결코 초식의 화려함에서 나오는 것이 아닙니다. 그 차이를 낳는 가장 근원적인 이유는 바로 기본기의 충실함이 다르기 때문입니다. 임기응변이 뛰어나다면 분명 짧은 순간 동안은 앞서갈 수 있을지도 모릅니다. 하지만 진정한 응용과 발전은 사물의 본질에 대한 깊은 통찰이 있을 때에만 가능하며 그런 지식과 능력만이 진정 길이길이 빛난다는 것은 독자 여러분께서 더욱 잘 아시리라 생각합니다. 그러기에 이 책은 특정 분야만이 아닌 자바 고수의 길을 가려는 개발자 모두에게 도움이 될 것입니다.

국내에는 많은 자바 활용서가 출간되어 있습니다. 하지만 대부분 서적이 자바의 문법 소개나 활용에만 치중되어 있고 정작 언어 자체에 대한 책은 거의 전무 하다시피 합니다. 자바의 인기가 하늘을 찌를 정도였다는 것을 생각해볼 때, 그 인기 높은 언어의 근원을 파헤치는 책이 아직 한 권도 없었다는 건 어찌 보면 정말 이상한 노릇입니다. 그런 면에서 지금에라도 『Java Language Specification, Third Edition』의 한국어판을 출간하게 되었다는 사실에 큰 의미를 부여할 수 있을 것입니다. 물론 솔직하게 말씀 드리면 이 책의 내용은 그리 만만하지 않습니다. 번역팀 내부에서도 이 책을 번역하며 “저자들이 너무 글을 못 쓰는 것 같다. 문장도 길고 한눈에 안 들어온다”라는 농담을 할 정도였습니다. 처음부터 끝까지 정독하기를 마음 먹으신 분이라면 어려운 부분은 건너뛰셔도 좋습니다. 그렇게 하시더라도 분명 책의 첫 장을 펴기 전과 마지막 장을 덮은 후가 확연히 달라지셨음을 여러분 스스로가 느끼시게 될 것입니다. 어렵다 느껴지신 부분은 그 이후에 천천히 공부하셔도 괜찮습니다.

책 자체의 내용이 어느 정도 난이도가 있었기에 저희 번역팀 내에서도 많은 고민이 있었고, 최대한 쉽게 그리고 오류가 없게 하려고 노력했습니다. 하지만 이 책의 저자들처럼 저희도 인쇄 직전까지도 원고 작업을 했고, 분명 어딘가에는 오역이나 오류가 있을 수 있으며 저희도 그것을 인정합니다. 다만 그런 것을 발견하셨을 때 비난만 하지 마시고 역자의 이메일이나 에이콘출판사의 홈페이지와 토론방(http://www.acornpub.co.kr/book/javaspec)을 통해 알려주시면 감사하겠습니다. 진정한 성장은 일방적이거나 감추고 내놓지 않는 지식에서 일어나는 것이 아니라 서로 공유하고 나누는 지식에서 일어나기 때문입니다.


[ 감수자 소개 ]

김형준 (http://www.jaso.co.kr)

삼성 SDS에서 엔터프라이즈 개발 분야에서 주로 활동했으며, 특히 객체지향의 다양한 장점을 엔터프라이즈 컴퓨팅에 적용하기 위한 연구를 많이 했다. 지금은 NHN에서 분산컴퓨팅 분야의 연구를 하고 있으며 특히 아파치 오픈소스 hadoop 및 관련 프로젝트에 관심이 많다.

목차

목차
  • 1장 소개 1
    • 1.1 예제 프로그램 5
    • 1.2 표기법 5
    • 1.3 이미 정의되어 있는 클래스, 인터페이스와의 관계 6
    • 1.4 참고 문헌 6
  • 2장 문법 8
    • 2.1 문맥 자유 문법 8
    • 2.2 어휘 문법 8
    • 2.3 구문 문법 9
    • 2.4 문법 표기법 9
  • 3장 어휘 구조 13
    • 3.1 유니코드 13
    • 3.2 어휘 번역 14
    • 3.3 유니코드 확장문자 15
    • 3.4 라인 종결자 16
    • 3.5 입력 요소 및 토큰 17
    • 3.6 공백 18
    • 3.7 주석 18
    • 3.8 식별자 19
    • 3.9 예약어 21
    • 3.10 리터럴 21
      • 3.10.1 정수 리터럴 22
      • 3.10.2 부동 소수점 리터럴 24
      • 3.10.3 Boolean 리터럴 27
      • 3.10.4 문자 리터럴 27
      • 3.10.5 문자열 리터럴 28
      • 3.10.6 문자 리터럴과 문자열 리터럴의 확장 문자열 30
      • 3.10.7 Null 리터럴 31
    • 3.11 구분자 32
    • 3.12 연산자 32
  • 4장 타입, 값, 변수 33
    • 4.1 타입의 종류와 값 34
    • 4.2 기본자료형과 값 35
      • 4.2.1 정수형과 값 36
      • 4.2.2 정수 연산 36
      • 4.2.3 부동소수점형, 형식, 값 38
      • 4.2.4 부동소수점 연산자 40
      • 4.2.5 boolean형과 boolean 값 43
    • 4.3 참조자료형과 값 44
      • 4.3.1 객체 45
      • 4.3.2 Object 클래스 48
      • 4.3.3 String 클래스 49
      • 4.3.4 참조자료형이 동일할 경우 49
    • 4.4 타입 변수 50
    • 4.5 매개변수화 타입 52
      • 4.5.1 타입 인자와 와일드카드 53
        • 4.5.1.1 타입 인자 포함과 동등 55
      • 4.5.2 매개변수화 타입의 구성 요소와 생성자 56
    • 4.6 타입 삭제 56
    • 4.7 구체화 가능한 타입 57
    • 4.8 원형 타입 58
    • 4.9 교차 타입 62
    • 4.10 하위타입화 63
      • 4.10.1 기본자료형 사이의 하위타입화 63
      • 4.10.2 클래스와 인터페이스 타입 사이의 하위타입화 64
      • 4.10.3 배열 타입의 하위타입화 65
    • 4.11 타입의 사용 65
    • 4.12 변수 67
      • 4.12.1 기본자료형 변수 67
      • 4.12.2 참조자료형 변수 67
        • 4.12.2.1 힙 오염 68
      • 4.12.3 변수의 종류 69
      • 4.12.4 final 변수 71
      • 4.12.5 변수의 디폴트값 72
      • 4.12.6 타입, 클래스, 인터페이스 73
  • 5장 형변환과 확장 77
    • 5.1 형변환의 종류 80
      • 5.1.1 식별 형변환 80
      • 5.1.2 기본자료형 확장 형변환 80
      • 5.1.3 기본자료형 축소 형변환 82
      • 5.1.4 기본자료형 확장 및 축소 형변환 84
      • 5.1.5 참조자료형 확장 형변환 85
      • 5.1.6 참조자료형 축소 형변환 85
      • 5.1.7 박싱 형변환 86
      • 5.1.8 언박싱 형변환 88
      • 5.1.9 비확인 형변환 89
      • 5.1.10 캡쳐 형변환 89
      • 5.1.11 문자열 형변환 92
      • 5.1.12 형변환 금지 92
      • 5.1.13 값 집합 형변환 92
    • 5.2 할당 형변환 93
    • 5.3 메소드 호출 형변환 99
    • 5.4 문자열 형변환 101
    • 5.5 캐스팅 형변환 101
    • 5.6 수치 확장 108
      • 5.6.1 단항 수치 확장 108
      • 5.6.2 이항 수치 확장 109
  • 6장 이름 113
    • 6.1 선언 114
    • 6.2 이름과 식별자 115
    • 6.3 선언의 유효범위 117
      • 6.3.1 선언 감춤 119
      • 6.3.2 모호한 선언 121
    • 6.4 멤버와 상속 122
      • 6.4.1 타입 변수의 멤버, 매개변수화 타입, 원형 타입, 교차 타입 122
      • 6.4.2 패키지의 멤버 122
      • 6.4.3 클래스 타입의 멤버 123
      • 6.4.4 인터페이스 타입의 멤버 124
      • 6.4.5 배열 타입의 멤버 125
    • 6.5 이름의 의미 결정 126
      • 6.5.1 문맥에 따른 이름의 구문 분류 127
      • 6.5.2 문맥상 모호한 이름의 재분류 129
      • 6.5.3 패키지명의 의미 131
        • 6.5.3.1 단순 패키지명 131
        • 6.5.3.2 한정 패키지명 131
      • 6.5.4 패키지또는타입명의 의미 131
        • 6.5.4.1 단순 패키지또는타입명 131
        • 6.5.4.2 한정 패키지또는타입명 131
      • 6.5.5 타입명의 의미 132
        • 6.5.5.1 단순 타입명 132
        • 6.5.5.2 한정 타입명 132
      • 6.5.6 표현식명의 의미 134
        • 6.5.6.1 단순 표현식명 134
        • 6.5.6.2 한정 표현식명 135
      • 6.5.7 메소드명의 의미 137
        • 6.5.7.1 단순 메소드명 137
        • 6.5.7.2 한정 메소드명 137
    • 6.6 접근 제어 138
      • 6.6.1 접근 가능성 결정 138
      • 6.6.2 protected 접근 139
        • 6.6.2.1 protected 멤버 접근 139
        • 6.6.2.2 protected 생성자 한정 접근 139
      • 6.6.3 접근 제어 예제 140
      • 6.6.4 public과 비 public 클래스 접근 예제 141
      • 6.6.5 필드, 메소드, 생성자의 디폴트 접근 예제 142
      • 6.6.6 public 필드, 메소드, 생성자 접근 예제 143
      • 6.6.7 protected 필드, 메소드, 생성자 접근 예제 143
      • 6.6.8 private 필드, 메소드, 생성자 접근 예제 144
    • 6.7 완전한정명과 정규명 145
    • 6.8 명명 규칙 146
      • 6.8.1 패키지명 147
      • 6.8.2 클래스명과 인터페이스명 147
      • 6.8.3 타입 변수명 148
      • 6.8.4 메소드명 149
      • 6.8.5 필드명 150
      • 6.8.6 상수명 150
      • 6.8.7 지역변수명과 매개변수명 151
  • 7장 패키지 153
    • 7.1 패키지 멤버 153
    • 7.2 패키지를 위한 호스트 지원 154
      • 7.2.1 파일 시스템에 패키지 저장하기 155
      • 7.2.2 데이터베이스에 패키지 저장하기 156
    • 7.3 컴파일 단위 157
    • 7.4 패키지 선언 158
      • 7.4.1 기명 패키지 158
        • 7.4.1.1 패키지 어노테이션 158
      • 7.4.2 무기명 패키지 159
      • 7.4.3 패키지의 유효성 159
      • 7.4.4 패키지 선언의 유효범위 160
    • 7.5 임포트 선언 160
      • 7.5.1 단일 타입 임포트 선언 161
      • 7.5.2 요청 타입 임포트 선언 163
      • 7.5.3 단일 정적 임포트 선언 163
      • 7.5.4 요청 정적 임포트 선언 165
      • 7.5.5 자동 임포트 165
      • 7.5.6 비정상적인 예 165
    • 7.6 최상위 타입 선언 166
    • 7.7 유일한 패키지명 170
  • 8장 클래스 173
    • 8.1 클래스 선언 174
      • 8.1.1 클래스 제한자 175
        • 8.1.1.1 추상 클래스 176
        • 8.1.1.2 final 클래스 178
        • 8.1.1.3 strictfp 클래스 178
      • 8.1.2 제네릭 클래스와 타입 매개변수 178
      • 8.1.3 내부 클래스와 인클로징 인스턴스 181
      • 8.1.4 상위클래스와 하위클래스 183
      • 8.1.5 상위인터페이스 185
      • 8.1.6 클래스 바디와 멤버 선언 189
    • 8.2 클래스 멤버 190
      • 8.2.1 상속의 예 191
        • 8.2.1.1 디폴트 접근을 갖는 상속 예제 191
        • 8.2.1.2 public과 protected의 상속 192
        • 8.2.1.3 private의 상속 193
        • 8.2.1.4 접근 불가능한 클래스의 멤버에 대한 접근 193
    • 8.3 필드 선언 195
      • 8.3.1 필드 제한자 197
        • 8.3.1.1 정적 필드 197
        • 8.3.1.2 final 필드 198
        • 8.3.1.3 transient 필드 199
        • 8.3.1.4 volatile 필드 199
      • 8.3.2 필드 초기화 200
        • 8.3.2.1 클래스 변수 초기자 201
        • 8.3.2.2 인스턴스 변수 초기자 202
        • 8.3.2.3 초기화 중 필드 사용의 제한 202
      • 8.3.3 필드 선언의 예 205
        • 8.3.3.1 클래스 변수 숨김 예제 205
        • 8.3.3.2 인스턴스 변수 숨김 예제 206
        • 8.3.3.3 다중상속필드 예제 207
        • 8.3.3.3 필드의 재상속 예제 209
    • 8.4 메소드 선언 210
      • 8.4.1 형식 매개변수 211
      • 8.4.2 메소드 서명 213
      • 8.4.3 메소드 제한자 214
        • 8.4.3.1 추상 메소드 215
        • 8.4.3.2 정적 메소드 217
        • 8.4.3.3 final 메소드 217
        • 8.4.3.4 native 메소드 218
        • 8.4.3.5 strictfp 메소드 219
        • 8.4.3.6 synchronized 메소드 219
      • 8.4.4 제네릭 메소드 220
      • 8.4.5 메소드 리턴 타입 221
      • 8.4.6 메소드 throws 절 222
      • 8.4.7 메소드 바디 224
      • 8.4.8 상속, 오버라이딩, 숨기기 224
        • 8.4.8.1 인스턴스 메소드 오버라이딩 225
        • 8.4.8.2 클래스 메소드 숨기기 226
        • 8.4.8.3 오버라이딩과 숨기기의 조건 226
        • 8.4.8.4 오버라이드 동등한 서명을 갖는
  • 메소드 상속하기 229
    • 8.4.9 오버로딩 230
    • 8.4.10 메소드 선언의 예 230
      • 8.4.10.1 오버라이딩 예제 231
      • 8.4.10.2 오버로딩, 오버라이딩, 숨기기 예제 231
      • 8.4.10.3 부정확한 오버라이딩 예 232
      • 8.4.10.4 오버로딩과 숨기기 비교 예제 232
      • 8.4.10.5 숨겨진 클래스 메소드의 호출 예제 234
      • 8.4.10.6 오버라이딩에 대한 예제 235
      • 8.4.10.7 throws로 인한 부정확한 오버라이딩 예제 237
  • 8.5 멤버 타입 선언 238
    • 8.5.1 제한자 238
    • 8.5.2 정적 멤버 타입 선언 238
  • 8.6 인스턴스 초기자 239
  • 8.7 정적 초기자 240
  • 8.8 생성자 선언 240
    • 8.8.1 형식 매개변수와 형식 타입 매개변수 241
    • 8.8.2 생성자 서명 241
    • 8.8.3 생성자 제한자 241
    • 8.8.4 제네릭 생성자 242
    • 8.8.5 생성자 throws 절 243
    • 8.8.6 생성자의 타입 243
    • 8.8.7 생성자 바디 243
      • 8.8.7.1 명시적 생성자 호출 244
    • 8.8.8 생성자 오버로딩 247
    • 8.8.9 디폴트 생성자 247
    • 8.8.10 클래스의 인스턴스화 막기 248
  • 8.9 열거형 249
  • 9장 인터페이스 259
    • 9.1 인터페이스 선언 260
      • 9.1.1 인터페이스 제한자 260
        • 9.1.1.1 추상 인터페이스 261
        • 9.1.1.2 strictfp 인터페이스 261
      • 9.1.2 제네릭 인터페이스와 타입 매개변수 261
      • 9.1.3 상위인터페이스와 하위인터페이스 262
      • 9.1.4 인터페이스 바디와 멤버 선언 263
      • 9.1.5 인터페이스 멤버명에 대한 접근 263
    • 9.2 인터페이스 멤버 264
    • 9.3 필드(상수) 선언 264
      • 9.3.1 인터페이스 내 필드의 초기화 265
      • 9.3.2 필드 선언의 예 266
        • 9.3.2.1 모호하게 상속된 필드 266
        • 9.3.2.2 여러 번 상속된 필드 266
    • 9.4 추상 메소드 선언 267
      • 9.4.1 상속과 오버라이딩 268
      • 9.4.2 오버로딩 269
      • 9.4.3 추상 메소드 선언의 예 269
        • 9.3.3.1 오버라이딩 예제 269
        • 9.3.3.2 오버로딩 예제 270
    • 9.5 멤버 타입 선언 270
    • 9.6 어노테이션 타입 271
      • 9.6.1 미리 정의된 어노테이션 타입 278
        • 9.6.1.1 Target 278
        • 9.6.1.2 Retention 278
        • 9.6.1.3 Inherited 279
        • 9.6.1.4 Override 279
        • 9.6.1.5 SuppressWarnings 280
        • 9.6.1.6 Deprecated 281
    • 9.7 어노테이션 281
  • 10장 배열 287
    • 10.1 배열 타입 288
    • 10.2 배열 변수 288
    • 10.3 배열 생성 289
    • 10.4 배열 접근 289
    • 10.5 배열의 간단한 예 290
    • 10.6 배열 초기자 290
    • 10.7 배열 멤버 292
    • 10.8 배열의 Class 객체 293
    • 10.9 문자의 배열은 String이 아니다 294
    • 10.10 배열 저장 예외 294
  • 11장 예외 297
    • 11.1 예외의 원인 298
    • 11.2 컴파일 시 예외 검사 298
      • 11.2.1 표현식의 예외 분석 299
      • 11.2.2 문장의 예외 분석 299
      • 11.2.3 예외 검사 300
      • 11.2.4 에러를 검사하지 않는 이유 301
      • 11.2.5 런타임 예외를 검사하지 않는 이유 301
    • 11.3 예외 처리 301
      • 11.3.1 예외의 정확성 302
      • 11.3.2 비동기 예외 처리 303
    • 11.4 예제 304
    • 11.5 예외 계층 306
      • 11.5.1 로드와 링크 에러 306
      • 11.5.2 가상머신 에러 307
  • 12장 실행 309
    • 12.1 가상머신 기동 309
      • 12.1.1 Test 클래스 로드 310
      • 12.1.2 Test 클래스 링크: 검증, 준비, 분석 310
      • 12.1.3 Test 클래스 초기화: 초기자 실행 311
      • 12.1.4 Test.main 호출 312
    • 12.2 클래스와 인터페이스 로딩 312
      • 12.2.1 로딩 절차 313
    • 12.3 클래스와 인터페이스 링크 314
      • 12.3.1 바이너리 표현 검증 314
      • 12.3.2 클래스나 인터페이스 타입 준비 315
      • 12.3.3 기호 참조 분석 315
    • 12.4 클래스와 인터페이스 초기화 316
      • 12.4.1 초기화 실행 시 316
      • 12.4.2 구체적인 초기화 절차 319
      • 12.4.3 초기화: 코드 생성의 결과 321
    • 12.5 클래스의 인스턴스 신규 생성 321
    • 12.6 클래스 인스턴스 종료 325
      • 12.6.1 종료 구현 326
        • 12.6.1.1 메모리 모델과의 상호작용 328
      • 12.6.2 비순차적 소멸자 호출 329
    • 12.7 클래스와 인터페이스 언로딩 330
    • 12.8 프로그램 종료 331
  • 13장 바이너리 호환성 333
    • 13.1 바이너리 형태 334
    • 13.2 바이너리 호환성과 비호환성 337
    • 13.3 패키지 변경 338
    • 13.4 클래스 변경 339
      • 13.4.1 추상 클래스 339
      • 13.4.2 final 클래스 339
      • 13.4.3 public 클래스 339
      • 13.4.4 상위클래스와 상위인터페이스 339
      • 13.4.5 클래스 형식 타입 매개변수 341
      • 13.4.6 클래스 바디와 멤버 선언 341
      • 13.4.7 멤버와 생성자로의 접근 343
      • 13.4.8 필드 선언 344
      • 13.4.9 final 필드와 생성자 346
      • 13.4.10 정적 필드 349
      • 13.4.11 transient 필드 349
      • 13.4.12 메소드와 생성자 선언 349
      • 13.4.13 메소드와 생성자의 형식 타입 매개변수 350
      • 13.4.14 메소드와 생성자의 매개변수 351
      • 13.4.15 메소드 리턴 타입 351
      • 13.4.16 추상 메소드 351
      • 13.4.17 final 메소드 352
      • 13.4.18 native 메소드 353
      • 13.4.19 정적 메소드 353
      • 13.4.20 synchronized 메소드 353
      • 13.4.21 메소드와 생성자의 throws 절 353
      • 13.4.22 메소드와 생성자 바디 353
      • 13.4.23 메소드와 생성자 오버로딩 354
      • 13.4.24 메소드 오버로딩 355
      • 13.4.25 정적 초기자 355
      • 13.4.26 열거형의 변경 355
    • 13.5 인터페이스의 변경 356
      • 13.5.1 public 인터페이스 356
      • 13.5.2 상위인터페이스 356
      • 13.5.3 인터페이스 멤버 356
      • 13.5.4 인터페이스 형식 타입 매개변수 357
      • 13.5.5 필드 선언 357
      • 13.5.6 추상 메소드 선언 357
      • 13.5.7 어노테이션 타입의 변경 358
  • 14장 블록과 문장 359
    • 14.1 문장의 정상 및 비정상 종료 360
    • 14.2 블록 361
    • 14.3 지역 클래스 선언 361
    • 14.4 지역변수 선언문 363
      • 14.4.1 지역변수 선언자와 타입 364
      • 14.4.2 지역변수 선언 유효범위 365
      • 14.4.3 지역변수에 의한 이름 감춤 367
      • 14.4.4 지역변수 선언의 실행 368
    • 14.5 문장 368
    • 14.6 빈 문장 370
    • 14.7 라벨 있는 문장 371
    • 14.8 표현문 372
    • 14.9 if 문 373
      • 14.9.1 if-then 문 373
      • 14.9.2 if-then-else 문 374
    • 14.10 assert 문 374
    • 14.11 switch 문 378
    • 14.12 while 문 382
      • 14.12.1 비정상 종료 383
    • 14.13 do 문 383
      • 14.13.1 비정상 종료 384
      • 14.13.2 예제 384
    • 14.14 for 문 385
      • 14.14.1 기본 for 문 385
        • 14.14.1.1 for 문의 초기화 386
        • 14.14.1.2 for 문의 반복 386
        • 14.14.1.3 for 문의 비정상 종료 387
      • 14.14.2 향상된 for 문 388
    • 14.15 break 문 390
    • 14.16 continue 문 392
    • 14.17 return 문 393
    • 14.18 throw 문 394
    • 14.19 synchronized 문 396
    • 14.20 try 문 397
      • 14.20.1 try-catch 실행 400
      • 14.20.2 try-catch-finally 실행 401
    • 14.21 도달 불가능한 문장 403
  • 15장 표현식 409
    • 15.1 평가, 지시, 결과 409
    • 15.2 값으로서의 변수 410
    • 15.3 표현식의 타입 410
    • 15.4 FP-strict 표현식 410
    • 15.5 표현식과 실행 시 검증 411
    • 15.6 평가의 정상 종료 및 비정상 종료 412
    • 15.7 평가 순서 414
      • 15.7.1 왼쪽 피연산자 우선 평가 414
      • 15.7.2 연산 전 피연산자 평가 416
      • 15.7.3 괄호와 우선순위를 고려한 평가 417
      • 15.7.4 인자 목록의 좌측 우선 평가 418
      • 15.7.5 그 밖의 표현식에 대한 평가 순서 419
    • 15.8 기본 표현식 419
      • 15.8.1 어휘 리터럴 420
      • 15.8.2 클래스 리터럴 420
      • 15.8.3 this 421
      • 15.8.4 한정 this 422
      • 15.8.5 괄호 표현식 422
    • 15.9 클래스 인스턴스 생성식 423
      • 15.9.1 인스턴스화할 클래스의 결정 424
      • 15.9.2 인클로징 인스턴스 결정 425
      • 15.9.3 생성자와 인자 선택 427
      • 15.9.4 클래스 인스턴스 생성식의 실행 시 평가 427
      • 15.9.5 익명클래스 선언 428
        • 15.9.5 익명 생성자 428
      • 15.9.6 예제 : 평가 순서와 Out-of-Memory 검출 429
    • 15.10 배열 생성식 430
      • 15.10.1 배열 생성식의 실행 시 평가 432
      • 15.10.2 예제 : 배열 생성 평가 순서 433
      • 15.10.3 예제 : 배열 생성과 Out-of-Memory 찾기 434
    • 15.1 필드 접근식 435
      • 15.11.1 기본 표현식을 이용한 필드 접근 435
      • 15.11.2 super를 이용한 상위클래스 멤버 접근 438
    • 15.12 메소드 호출식 440
      • 15.12.1 컴파일 시 단계 : 찾을 클래스나 인터페이스 결정 440
      • 15.12.2 컴파일 시 단계 2: 메소드 서명 결정 442
        • 15.12.2.1 잠재적 적용가능 메소드 식별 443
        • 15.12.2.2 페이즈 1: 하위타입화을 통해 적용가능한
  • 적합 arity 메소드 식별 445
    • 15.12.2.3 페이즈 2: 메소드 호출 형변환을 통해
  • 적용가능한 적합 arity 메소드 식별 446
    • 15.12.2.4 페이즈 3: 적용가능한
  • 가변길이 메소드 식별 446
    • 15.12.2.5 최적 메소드 선택 447
    • 15.12.2.6 메소드 리턴 타입과 throws 타입 450
    • 15.12.2.7 실인자에 기초한 타입 인자 추론 451
    • 15.12.2.8 분석되지 않은 타입 인자 추론 466
    • 15.12.2.9 예제 466
    • 15.12.2.10 모호한 오버로딩 예제 468
    • 15.12.2.1 리턴 타입 무시 예제 468
    • 15.12.2.12 컴파일 시 분석 예제 469
  • 15.12.3 컴파일 단계 3: 적정 메소드 선택 확인 471
  • 15.12.4 실행 시 메소드 호출 평가 473
    • 15.12.4.1 (필요 시) 목표 참조 계산 473
    • 15.12.4.2 인자 평가 474
    • 15.12.4.3 타입과 메소드의 접근가능성 확인 475
    • 15.12.4.4 호출 대상 메소드 위치 확정 476
    • 15.12.4.5 프레임 생성, 동기화, 제어 이동 477
    • 15.12.4.6 목표 참조와 정적 메소드 예제 479
    • 15.12.4.7 평가 순서 예제 479
    • 15.12.4.8 오버라이딩 예제 480
    • 15.12.4.9 super를 이용한 메소드 호출 예제 482
  • 15.13 배열 접근식 483
    • 15.13.1 실행 시 배열 접근 평가 483
    • 15.13.2 배열 접근 평가 순서 예제 484
  • 15.14 후행 표현식 486
    • 15.14.1 표현식명 486
    • 15.14.2 후행 증가 연산자 ++ 486
    • 15.14.3 후행 감소 연산자 -- 487
  • 15.15 단항 연산자 488
    • 15.15.1 선행 증가 연산자 ++ 488
    • 15.15.2 선행 감소 연산자 -- 489
    • 15.15.3 단항 덧셈 연산자 + 489
    • 15.15.4 단항 뺄셈 연산자 - 490
    • 15.15.5 비트 보수 연산자 ~ 490
    • 15.15.6 논리 보수 연산자 ! 491
  • 15.16 형변환 표현식 491
  • 15.17 배수 연산자 492
    • 15.17.1 곱셈 연산자 * 492
    • 15.17.2 나눗셈 연산자 / 493
    • 15.17.3 나머지 연산자 % 495
  • 15.18 부가 연산자 496
    • 15.18.1 문자열 연결 연산자 + 497
      • 15.18.1.1 문자열 형변환 497
      • 15.18.1.2 문자열 연결 최적화 498
      • 15.18.1.3 문자열 연결 예제 498
    • 15.18.2 숫자형의 부가 연산자(+와 -) 500
  • 15.19 이동 연산자 501
  • 15.20 관계 연산자 503
    • 15.20.1 숫자 비교 연산자 <, <=, >, >= 503
    • 15.20.2 타입 비교 연산자 instanceof 504
  • 15.2 동등비교 연산자 505
    • 15.21.1 숫자 동등비교 연산자 ==과 != 506
    • 15.21.2 Boolean 동등비교 연산자 ==와 != 506
    • 15.21.3 참조 동등비교 연산자 ==과 != 507
  • 15.22 비트 연산자와 논리 연산자 507
    • 15.22.1 정수형 비트 연산자 &, ^, | 508
    • 15.22.2 Boolean 논리 연산자 &, ^, | 508
  • 15.23 조건 And 연산자 && 508
  • 15.24 조건 Or 연산자 || 509
  • 15.25 조건 연산자 ? : 510
  • 15.26 할당 연산자 512
    • 15.26.1 단순 할당 연산자 = 513
    • 15.26.2 복합 할당 연산자 519
  • 15.27 표현식 525
  • 15.28 상수 표현식 526
  • 16장 명시적인 할당 527
    • 16.1 명시적인 할당과 표현식 533
      • 16.1.1 Boolean 상수식 533
      • 16.1.2 Boolean 연산자 && 533
      • 16.1.3 Boolean 연산자 || 534
      • 16.1.4 Boolean 연산자 ! 534
      • 16.1.5 Boolean 연산자 ?: 534
      • 16.1.6 조건 연산자 ?: 535
      • 16.1.7 boolean 형의 다른 표현식 535
      • 16.1.8 할당 표현식 535
      • 16.1.9 ++ 와 -- 연산자 536
      • 16.1.10 나머지 표현식 536
    • 16.2 명시적 할당과 문장 538
      • 16.2.1 빈 문장 538
      • 16.2.2 블록 538
      • 16.2.3 지역 클래스 선언문 539
      • 16.2.4 지역변수 선언문 540
      • 16.2.5 라벨 있는 문장 540
      • 16.2.6 표현문 540
      • 16.2.7 if 문 541
      • 16.2.8 assert 문 541
      • 16.2.9 switch 문 542
      • 16.2.10 while 문 542
      • 16.2.11 do 문 543
      • 16.2.12 for 문 543
        • 16.2.12.1 초기화 부분 544
        • 16.2.12.2 증가 부분 544
      • 16.2.13 break, continue, return, throw 문 545
      • 16.2.14 synchronized 문 545
      • 16.2.15 try 문 545
    • 16.3 명시적 할당과 매개변수 547
    • 16.4 명시적 할당과 배열 초기자 547
    • 16.5 명시적 할당과 열거형 상수 548
    • 16.6 명시적 할당과 익명 클래스 548
    • 16.7 명시적 할당과 멤버 타입 549
    • 16.8 명시적 할당과 정적 초기자 549
    • 16.9 명시적 할당과 생성자, 인스턴스 초기자 550
  • 17장 스레드와 잠금 553
    • 17.1 잠금(Locks) 554
    • 17.2 예제 표기법 554
    • 17.3 부적절하게 동기화된 프로그램의 동작 555
    • 17.4 메모리 모델 557
      • 17.4.1 공유 변수 558
      • 17.4.2 액션 558
      • 17.4.3 프로그램과 프로그램 순서 560
      • 17.4.4 동기화 순서 561
      • 17.4.5 선행(Happens-before) 순서 562
      • 17.4.6 실행 567
      • 17.4.7 올바르게 구성된(Well-formed) 실행 568
      • 17.4.8 실행 및 인과관계 요구사항 568
      • 17.4.9 식별 가능한 동작과 끝나지 않는 실행 571
    • 17.5 Final 필드 의미론 573
      • 17.5.1 Final 필드의 의미론 575
      • 17.5.2 생성 중 Final 필드 읽기 576
      • 17.5.3 Final 필드의 추후 수정 576
      • 17.5.4 쓰기 방지(write-protected) 필드 578
    • 17.6 워드 찢기(Word Tearing) 578
    • 17.7 double과 long의 비 원자적(Non-atomic) 처리 580
    • 17.8 대기 집합과 통보(Notification) 580
      • 17.8.1 대기 580
      • 17.8.2 통보(Notification) 582
      • 17.8.3 인터럽션(Interruption) 582
      • 17.8.4 대기, 통보, 인터럽션의 상호작용 583
    • 17.9 일시 정지(sleep)와 양보(yidld) 583
  • 18장 문법 585
  • 관련 블로그 글

    아듀 2007
    오늘 에이콘의 107번째 책『Java Language Specification, Third Edition (한국어판)』이 출간되었습니다. 2007년의 마지막 날을 뜻깊게 마무리해준 이 책으로 올해 에이콘은 스물세권의 책을 펴냈습니다. 작년 결산에 이어 올해도 결산을 해봤는데요. 몇 권 더 나온 건데도 이젠 좀 멀리 떨어져 찍어야 한 화면에 모두 잡히는군요. :)
    연말이고 한데 달리 드릴 건 없고, 몇 분의 근황이나 알려드릴게요.
    [##_Gallery|6903313957.jpg||8404797921.jpg||9570777323.jpg||9257600021.jpg||2209539728.jpg||width="400" height="300"_##]오늘은 멀리 미국에서 유학 중인 해킹 보안 시리즈 에디터 강유님, 『와이어샤크를 활용한 실전 패킷 분석』의 두 분 역자 김경곤님, 장은경님과 점심 식사를 함께 했습니다. 이 자리에서 강유님은 역자 두 분이 싸인을 한 책을 받아들고 흐뭇해하셨죠. 자리를 함께 하지는 못했지만 윤근용님, 김홍석님이 좋은 책 만들어주시니 에이콘의 해킹 보안 시리즈는 앞으로도 독자분들께 좋은 책 많이 보여드릴 수 있을 것 같습니다.
    매번 관리대상 역자 방문차원으로 NHN에 갈 때마다 다른 역자분들의 시기질투를 야기하신 양주일 UIT 센터장님, 장정환 Ajax UI 랩장님이 사무실에 오셔서 『초난감 기업의 조건』 홍보대사를 맡아주셨습니다. 두 분 승진도 축하드리고, 내년 3월에 나올 양주일 센터장님의 신간 기대하겠습니다. 그리고 사진에 담지는 못했지만, 오늘 에이콘을 방문해주신 역자 남기혁님과 오늘 처음 인연을 맺은 역자 김홍중님 등도 2007 에이콘의 마지막 날을 함께 해주신 분이군요.

    이 모든 필자분들과 안팎에서 에이콘을 도와주시는 분들이 계시기에 하루하루 에이콘은 쑥쑥 자라나고 있습니다. 올 한해 동안 좋은 책 찾아주시고 번역 저술해주신 여러 역자, 저자님들과, 뜨거운 응원 보내주신 많은 분께 감사합니다. 그리고 무엇보다도 저희 책 사랑해주신 독자님들께 감사합니다. 많은 분의 따뜻한 사랑에 보답하기 위해 내년에도 에이콘은 최선을 다하겠습니다.

    지난 1년을 돌아보니 글 목록만큼 참 많은 일이 있었네요. 이제 2007년도 두어 시간 남짓 남았습니다. 내년에는 이 글 읽으시는 분들 모두 건강하시고, 원하는 소망 모두 이루시길 빌어드릴게요.

    오늘은 글이 왜 이렇게 우왕좌왕할까요. ^^; 2007년을 마감하면서 마지막으로 독자분들께 상큼한 하트를 날려드릴게요. 저희도 어느 좋은 분께 받은 선물인데 받은 만큼 돌려드려야죠! 열심히 블로그글을 쓰고 있는데도 책 이야기만 쓰지 말고 더 재미있는(!) 글 좀 써달라고 한 블로그 애독자 분을 위해서 짤방도 하나 올립니다. :)
    예쁜 신입 직원이 날리는 하트 받으시고 내년엔 더욱 행복하세요! ^^ 새해 복 많이 받으세요!

    CC

    크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

    『The Java Language Specification』한국어판 출간
    The Java Language Specification, Third Edition (한국어판)
    James Gosling, Bill Joy, Guy Steele, Gilad Bracha 지음
    허진영, 최선재, 이상민, 이정룡 옮김 | 김형준 감수
    9788960770072 | 704페이지 | 36,000원 | 2007년 12월 31일 출간

    ... 어느 스승과 제자의 대화

    “스승님. 어느 정도 기본은 됐으니, 이제 자바의 고수로 가는 길을 알려주십시오.”

    “자, 이 책을 마늘과 양파를 먹으며 정독하도록 하여라.”

    “아니, 이 책은 Java Language Specification이 아닙니까? 저는 JVM 같은 시스템 소프트웨어엔 별 취미가 없습니다. 응용프로그램을 잘 만들고 싶으니 다른 책을 권해주십시오.”

    “아니, 스노보드를 타면서 왜 무릎을 세우고 바닥이 아닌 진행 방향을 바라봐야 하는지, 어떤 원리에 의해 조정이 가능한지도 모르면서 하프파이프부터 먼저 타려 하는 것이 말이 된다고 생각하느냐?”
    - 옮긴이의 말 중에서

    드디어 『The Java Language Specification, Third Edition』의 한국어판이 출간됩니다. 12월 31일에 출간되는 2007년 에이콘의 마지막 작품이 되겠네요. (물론 들뜬 연말 분위기에도 불구하고 에이콘의 비장한 마감 모드는 다음 주에도 쭈욱 이어진다고 하지요.) 1996년 초판이 발행된 이후, 2000년 2판, 그리고 이번에 저희가 번역 출간하는 이 책 3판까지 자바라는 언어를 샅샅이 파헤치고 분석한, 그야말로 자바 언어에 대한 바이블이라고 할 수 있습니다.

    역자분이 옮긴이 서문에서 말씀하셨듯이 자바의 인기도에 비해 자바에 대한 책들은 그저 문법 소개나 활용에 대한 책들만 즐비했을 뿐 언어의 근원을 파헤치는 서적은 전무했습니다. 금번에 출간되는 『The Java Language Specification, Third Edition (한국어판)』으로 자바 프로그래밍 언어의 실체를 만나보시기 바랍니다.

    지금 교보문고, YES24, 강컴, 인터파크, 알라딘 등에서 예약 주문을 받고 있습니다.

    이 책의 역자분들을 만난 건 지난(!) 봄이었습니다. 당시 출간을 앞두고 있던『SOA: 서비스 지향 아키텍처』홍보차 삼성 SDS 자바 커뮤니티 세미나를 들렀다가, 지금은 NHN으로 자리를 옮기신, 당시 회장을 맡아 커뮤니티를 이끌던 김형준님을 처음 만나 인사를 나누면서 이길고도 질긴 인연의 끈이 시작되었던 거죠. 늘 사명을 품고 더 나은 개발자 세상을 만들기 위해 열심히 살아가시는 김형준님을 통해네 분의 역자를 소개받았습니다. 사당역 어디께선가 처음 뵈었던 서먹하던 자리에서부터, 그야말로 "명세서"를 번역해야하는 막중한부담감에 어려워하시던 역자분들과의 몇 차례에 거친 번역 미팅 등 그리고 그 수많은 독촉과 압박의 나날들. ^^ 막판 퇴고과정에서 온 원고지를 새빨갛게 물들일 정도의 열의로 끝까지 최선을 다해주신 네 분 역자들과 처음부터 끝까지 번역팀을 꾸려 끌고나가주신 김형준님께 진심으로 감사하단 말씀 전합니다. 모두 고생 많으셨습니다.

    [##_Gallery|5894889475.jpg||6554417573.jpg||3775289010.jpg||5992399151.jpg||width="450" height="320"_##]올 여름 예쁜 아들을 낳은 최선재님(사진 왼쪽)과 그 아이의 아빠가 된 허진영님입니다.

    출간에 임박한 마감의 날들은 사실 온 몸과 신경이 곤두섭니다. 필자분들은 한 글자라도 더 책에 정성을 넣으려고 열정을 쏟아내시고, 출간 일정과 책의 품질을 동시에 고려해야 하는 저희들간의 보이지 않는 암투가 벌어지기도 하죠.어제 오신 허진영님, 최선재님 두분은 보기만해도 즐거워지는 부부 역자셨습니다. 소울메이트가 바로 저런 두 분을 일컬어 나온 말인가보다라는 생각이 절로 들 정도로 소근소근 의견을 나누며 일하시는 모습은 옆에서 봐도 부러웠으니까요. 게다가 모든 필자분들이 그러하셨지만, 늦어지는 마감 원고 리뷰에도 활짝 핀 웃음 잃지 않으시고 즐겁게 작업하시는 모습이 참 좋았습니다. 재깍재깍 평시의 3배 속도로 정신없이 달려가는 시계 초침도 그럴 때는 즐거운 리듬악기처럼 들리기도 한답니다. 힘들었을 텐데도 밝게 웃음 머금은 얼굴 늘 잃지 않고 열심히 일하는 직원들에게도 참 고맙다는 말 슬쩍 전해봅니다.

    참, 마감을 하던 어제 밤에는 『Ajax 패턴과 베스트 프랙티스』의 역자 최재훈님께서 이쁜 친구들을 잔뜩 데리고 회사에 들러주셨습니다. 안 그래도 아기자기한 저희 에이콘이 더욱 알콩달콩해질 것 같습니다. :) 저희는 최재훈님께 오신 기념으로 멋진 원서를 한 권 안겨드렸습니다. 번역하실 책으로요~ ^^; 기쁘셨죠? 이래저래 정말 감사합니다!


    올해는 이것저것 바쁘다는 핑계로 가까이 계신 고마운 분들께 인사도 제대로 드리지 못했는데, 맛있는 먹거리를 보내주기도 하시며 불쑥 전해오시는 여러분들의 따뜻한 마음에 가슴이 훈훈해집니다. 물론 표현하지 않으시는 수많은 독자분과 필자분들이 저희들 아껴주시는 감사한 마음은 너무 잘알고 있습니다요. :-)

    모두 건강하시고 남은 2007년의 마지막 주도 잘 마무리하시기 바랍니다! 감사하는 마음으로 바라보면 모든 세상이 참 따뜻해지더군요. 행복한 주말 보내세요. 
    CC

    크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

    도서 오류 신고

    도서 오류 신고

    에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

    오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

    (예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

    정오표

    [ p53 박스 내 ]
    WildcardBounds:
        extends ReferenceType
        52super ReferenceType

    WildcardBounds:
        extends ReferenceType
        super ReferenceType