book.jayu.org
Java™ language specification, Third edition

Java™ language specification, Third edition

James Gosling (지은이), Bill Joy (지은이), Guy Steele (지은이), Gilad Bracha (지은이), 허진영 (옮긴이), 최선재 (옮긴이), 이상민 (옮긴이), 이정룡 (옮긴이)

에이콘출판·2008-01-02

  • 기술과학
  • KDC 005.133

로그인하면 내 서재에 추가할 수 있어요.

책 소개

자바 프로그래밍 언어는 범용적이고 병렬 수행이 가능한 클래스 기반의 객체지향 언어로, 많은 프로그래머들이 언어를 능숙하게 다룰 수 있도록 매우 단순하게 설계되었다. 자바 프로그래밍 언어는 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 언어는 “사용 경험이 증가할수록 더 다루기 쉬워짐”을…

목차펼치기

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 필드…

출처: 국립중앙도서관 서지정보

리뷰 남기기

로그인하면 리뷰를 남길 수 있어요.

리뷰 0개

아직 리뷰가 없어요.