자바 프로그래밍 언어는 처음에는 Oak라 불렸으며 James Gosling에 의해 전자 제품의 임베디드 애플리케이션을 개발하기 위해 만들어졌다. 몇 년 후 이 언어에 대한 사용 경험과 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가 성장해 가면서 가진 경험을 통해 오래 지속 되었음” 을 느꼈다고 한다. 만약 C를 좋아한다면, 자바 프로그래밍 언어도 좋아하리라 생각한다. 또한 자바가 오래 지속되기를 희망한다.
James Gosling
Cupertino, California
Bill Joy
Aspen, Colorado
Guy Steele
Chelmsford, Massachusetts July, 1996
<2판 저자 서문>
지난 수년 동안 자바 프로그래밍 언어는 전례 없는 성공을 거두었다. 이 성공은 새로운 도전을 불러왔다. 이 폭발적인 성공에 따라, 언어와 라이브러리에 대한 폭발적인 수요가 발생하였다. 이 도전을 통해 자바는 운 좋게도 불협화음 없이 잘 성장하였고 현재 많은 라이브러리를 가지고 있다.
『The Java™ Language Specification』의 2판은 이런 발전된 모습들을 반영한다. 이 명세서는 1996년 초판 발행 이후 이루어진 많은 자바 프로그래밍 언어의 변화를 통합한다. 이러한 변화의 대부분은 1997년 자바 플랫폼 1.1의 발표를 통해 생겨났고 중첩 타입 선언의 추가에 초점을 두고 이루어졌다. 이 후 발생한 변경으로는 부동 소수점 연산이 있다. 또한 이번 판에서는 메소드 룩업과 바이너리 호환성과 관련하여 중요한 설명과 개정이 포함되었다.
이번 명세서는 최근의 자바 언어를 정의한다. 자바 프로그래밍 언어는 계속해서 진화하고 있다. 이 글을 쓰는 동안에도 제네릭 타입(generic type)과 단언(assertions)을 가지고 언어를 확대하고 메모리 모델을 정제하는 것과 같은 연구가 Java Community Process를 통해 진행되고 있다. 그러나, 이런 노력들이 결실을 이룰 때까지 2판의 발행을 미루는 것은 옳지 않다고 본다.
라이브러리는 이제 너무 크고 계속해서 진화를 하기 때문에 이 책에서 라이브러리를 다루기에는 분량이 부족하다. 따라서 API의 상세한 설명은 이 책에서는 제외하도록 한다. 라이브러리의 상세한 설명은 java.sun.com의 웹사이트에서 볼 수 있다. 이번 명세서는 자바 프로그래밍 언어에만 집중한다.
독자들은 jls@java.sun.com으로 이번 명세서에 대한 의견을 보낼 수 있다. 최신의 자바 플랫폼에 대해 배우고 싶거나 최근 자바 SDK 릴리즈를 다운 받으려면 http://java.sun.com 을 방문하기 바란다. 『The Java™ Language Specfication, Second Edition』의 오류를 포함하여 자바 시리즈에 대한 업데이트된 정보나 곧 나올 책의 프리뷰도 http://java.sun.com/Series에서 볼 수 있다.
Gilad Bracha
Los Altos, California April, 2000
이것은 Dictionary의 여성용 판이다.
남성용 판은 거의 똑같지만, 완전히 같지는 않다.
한 문단이 결정적으로 다르다고 경고한다.
선택은 당신의 것이다.
— Milorad Pavic, Dictionary of the Khazars, 여성용 판
<3판 저자 서문>
『Java™ Programming Language Specification』의 이번 판은 자바언어 역사에 있어서 가장 큰 변화를 묘사한다. 제네릭(Generics), 어노테이션(annotations), 단언문(asserts), 박싱/언박싱(autoboxing/unboxing), 열거형 타입(enum types), foreach 구문, 가변 길이 매개변수를 갖는 메소드, 정적 임포트(static imports)는 모두 최근에 자바 언어에 더해진 것들이다. 단언문만 빼면 모두 2004년 가을 5.0 릴리즈에 포함된 사항들이다.
『Java™ Programming Language Specification』의 이번 3판은 이런 발전들을 반영했다. 2000년에 있은 2판 발행 이후에 있었던 모든 자바 프로그래밍 언어의 변화들을 통합했다.
언어는 지난 4년 동안 많은 성장을 이뤘다. 불행하게도, 이와 같은 성장은 단지 계속해서 크기만 커졌지 상업적으로 성공한 프로그래밍 언어를 움츠러들게 했다. 호환성의 제한, 다양한 사용 요구, 사용자들의 충돌을 감안하면서 이 같은 성장을 이루는 것은 쉬운 일이 아니다. 이 도전이 성공적으로 이르기를 단지 희망할 뿐이며 시간이 말해줄 것이다.
독자들은 jls@java.sun.com에 의견을 보낼 수 있다. 최신의 Java platform에 대해 배우려 하거나 최근 J2SE 릴리즈를 다운 받으려면 http://java.sun.com을 방문해라. 『The Java™ Language Specfication, Third Edition』의 오류를 포함하여 자바 시리즈에 대한 업데이트된 정보나 곧 나올 책의 프리뷰도 http://java.sun.com/Series에서 볼 수 있다.
Gilad Bracha
Los Altos, California January, 2005
--- 저자 서문