길벗·이지톡

도서 IT 전문서 프로그래밍/오픈소스
r

자바가 현대 언어로 다시 태어났다!

자바 8이 등장하면서 모든 것이 바뀌었다. 함수형 프로그래밍을 지원하는 람다를 도입했고, 병행 프로그래밍 또한 기존의 오류가 발생하기 쉬운 방식 대신 스트림 API를 사용하여 새롭게 접근할 수 있게 했다. 이런 변화는 20여 년 동안 견고하게 다져진 자바를 더욱 강력한 언어로 만들었다. 이제는 단순히 자바 8의 새 기능을 쓰는 것이 아니라 바뀐 현대 언어의 시각으로 자바를 시작해야 한다. 이 책은 자바 8에 추가된 개념과 특징을 기존 자바에 덧붙인 것이 아니라 기본 문법부터 라이브러리까지 현대 자바의 시각으로 자바의 모든 면을 배울 수 있게 해준다. 이 책으로 간결하고 빠르게 현대 자바를 배울 수 있다.

목차

지은이 서문
옮긴이 서문

1장 기본 프로그래밍 구조

1.1 첫 번째 프로그램
___1.1.1 Hello, World 프로그램 분석하기
___1.1.2 자바 프로그램 컴파일하고 실행하기
___1.1.3 메서드 호출
1.2 기본 타입
___1.2.1 정수 타입
___1.2.2 부동소수점 타입
___1.2.3 char 타입
___1.2.4 boolean 타입
1.3 변수
___1.3.1 변수 선언
___1.3.2 변수 이름
___1.3.3 변수 초기화
___1.3.4 상수
1.4 산술 연산
___1.4.1 대입
___1.4.2 기본 산술
___1.4.3 수학 메서드
___1.4.4 숫자 타입 변환
___1.4.5 관계 연산자와 논리 연산자
___1.4.6 큰 숫자
1.5 문자열
___1.5.1 문자열 연결
___1.5.2 부분 문자열
___1.5.3 문자열 비교
___1.5.4 숫자와 문자열 사이의 변환
___1.5.5 문자열 API
___1.5.6 코드 포인트와 코드 유닛
1.6 입력과 출력
___1.6.1 입력 읽어오기
___1.6.2 형식화된 출력
1.7 제어 흐름
___1.7.1 분기
___1.7.2 루프
___1.7.3 중단과 계속
___1.7.4 지역 변수의 유효 범위
1.8 배열과 배열 리스트
___1.8.1 배열 다루기
___1.8.2 배열 생성
___1.8.3 배열 리스트
___1.8.4 기본 타입의 래퍼 클래스
___1.8.5 향상된 for 루프
___1.8.6 배열과 배열 리스트 복사하기
___1.8.7 배열 알고리즘
___1.8.8 명령줄 인자
___1.8.9 다차원 배열
1.9 함수 분해
___1.9.1 정적 메서드 선언하고 호출하기
___1.9.2 배열 파라미터와 반환 값
___1.9.3 가변 인자
연습문제

2장 객체 지향 프로그래밍

2.1 객체 이용하기
___2.1.1 접근자 메서드와 변경자 메서드
___2.1.2 객체 참조
2.2 클래스 구현하기
___2.2.1 인스턴스 변수
___2.2.2 메서드 선언부
___2.2.3 메서드 구현부
___2.2.4 인스턴스 메서드 호출
___2.2.5 this 참조
___2.2.6 값을 이용한 호출
2.3 객체 생성
___2.3.1 생성자 구현하기
___2.3.2 오버로딩
___2.3.3 생성자에서 특정 생성자 호출하기
___2.3.4 기본 초기화
___2.3.5 인스턴스 변수 초기화
___2.3.6 최종 인스턴스 변수
___2.3.7 인자 없는 생성자
2.4 정적 변수와 정적 메서드
___2.4.1 정적 변수
___2.4.2 정적 상수
___2.4.3 정적 초기화 블록
___2.4.4 정적 메서드
___2.4.5 팩토리 메서드
2.5 패키지
___2.5.1 패키지 선언
___2.5.2 클래스 패스
___2.5.3 패키지 유효 범위
___2.5.4 클래스 임포트하기
___2.5.5 정적 임포트
2.6 중첩 클래스
___2.6.1 정적 중첩 클래스
___2.6.2 내부 클래스
___2.6.3 내부 클래스용 특수 문법 규칙
2.7 문서화 주석
___2.7.1 주석 넣기
___2.7.2 클래스 주석
___2.7.3 메서드 주석
___2.7.4 변수 주석
___2.7.5 일반 주석
___2.7.6 링크
___2.7.7 패키지 주석과 개요 주석
___2.7.8 주석 내보내기
연습문제

3장 인터페이스와 람다 표현식

3.1 인터페이스
___3.1.1 인터페이스 선언하기
___3.1.2 인터페이스 구현하기
___3.1.3 인터페이스 타입으로 변환하기
___3.1.4 타입 변환과 instanceof 연산자
___3.1.5 인터페이스 확장하기
___3.1.6 여러 인터페이스 구현하기
___3.1.7 상수
3.2 정적 메서드와 기본 메서드
___3.2.1 정적 메서드
___3.2.2 기본 메서드
___3.2.3 기본 메서드의 충돌 해결하기
3.3 인터페이스의 예
___3.3.1 Comparable 인터페이스
___3.3.2 Comparator 인터페이스
___3.3.3 Runnable 인터페이스
___3.3.4 사용자 인터페이스 콜백
3.4 람다 표현식
___3.4.1 람다 표현식 문법
___3.4.2 함수형 인터페이스
3.5 메서드 참조와 생성자 참조
___3.5.1 메서드 참조
___3.5.2 생성자 참조
3.6 람다 표현식 처리하기
___3.6.1 지연 실행 구현하기
___3.6.2 함수형 인터페이스 고르기
___3.6.3 자신만의 함수형 인터페이스 구현하기
3.7 람다 표현식과 변수 유효 범위
___3.7.1 람다 표현식의 유효 범위
___3.7.2 바깥쪽 유효 범위에 속한 변수 접근하기
3.8 고차 함수
___3.8.1 함수를 반환하는 메서드
___3.8.2 함수를 수정하는 메서드
___3.8.3 Comparator 인터페이스의 메서드
3.9 지역 내부 클래스
___3.9.1 지역 클래스
___3.9.2 익명 클래스
연습문제

4장 상속과 리플렉션

4.1 클래스 확장하기
___4.1.1 슈퍼클래스와 서브클래스
___4.1.2 서브클래스 메서드 정의와 상속
___4.1.3 메서드 오버라이딩
___4.1.4 서브클래스 생성
___4.1.5 슈퍼클래스 할당
___4.1.6 타입 변환
___4.1.7 최종 메서드와 최종 클래스
___4.1.8 추상 메서드와 추상 클래스
___4.1.9 보호 접근
___4.1.10 익명 서브클래스
___4.1.11 상속과 기본 메서드
___4.1.12 super를 이용한 메서드 표현식
4.2 Object: 보편적 슈퍼클래스
___4.2.1 toString 메서드
___4.2.2 equals 메서드
___4.2.3 hashCode 메서드
___4.2.4 객체 복제하기
4.3 열거
___4.3.1 열거의 메서드
___4.3.2 생성자, 메서드, 필드
___4.3.3 인스턴스의 구현부
___4.3.4 정적 멤버
___4.3.5 열거를 기준으로 스위치하기
4.4 실행 시간 타입 정보와 리소스
___4.4.1 Class 클래스
___4.4.2 리소스 로드하기
___4.4.3 클래스 로더
___4.4.4 컨텍스트 클래스 로더
___4.4.5 서비스 로더
4.5 리플렉션
___4.5.1 클래스 멤버 나열하기
___4.5.2 객체 조사하기
___4.5.3 메서드 호출하기
___4.5.4 객체 생성하기
___4.5.5 자바빈즈
___4.5.6 배열 다루기
___4.5.7 프록시
연습문제

5장 예외, 단정, 로깅

5.1 예외 처리
___5.1.1 예외 던지기
___5.1.2 예외 계층
___5.1.3 검사 예외 선언하기
___5.1.4 예외 잡기
___5.1.5 Try-with-Resources 문
___5.1.6 finally 절
___5.1.7 예외 다시 던지기와 예외 연쇄하기
___5.1.8 스택 추적
___5.1.9 Objects.requireNonNull 메서드
5.2 단정
___5.2.1 단정 사용하기
___5.2.2 단정 활성화와 비활성화
5.3 로깅
___5.3.1 로거 사용하기
___5.3.2 로거
___5.3.3 로깅 레벨
___5.3.4 기타 로깅 메서드
___5.3.5 로깅 설정
___5.3.6 로그 핸들러
___5.3.7 필터와 서식 지정자
연습문제

6장 제네릭 프로그래밍

6.1 제네릭 클래스
6.2 제네릭 메서드
6.3 타입 경계
6.4 타입 가변성과 와일드카드
___6.4.1 서브타입 와일드카드
___6.4.2 슈퍼타입 와일드카드
___6.4.3 타입 변수와 함께 사용하는 와일드카드
___6.4.4 경계 없는 와일드카드
___6.4.5 와일드카드 캡처
6.5 자바 가상 머신의 제네릭
___6.5.1 타입 소거
___6.5.2 타입 변환 연산자 삽입
___6.5.3 브릿지 메서드
6.6 제네릭의 제약
___6.6.1 기본 타입 인자가 없다
___6.6.2 실행 시간에는 모든 타입이 로 형태다
___6.6.3 타입 변수의 인스턴스를 만들 수 없다
___6.6.4 파라미터화된 타입의 배열을 생성할 수 없다
___6.6.5 정적 컨텍스트에서 클래스 타입 변수가 유효하지 않다
___6.6.6 메서드가 소거 후 충돌하지 않을 수도 있다
___6.6.7 예외와 제네릭
6.7 리플렉션과 제네릭
___6.7.1 Class〈T〉 클래스
___6.7.2 가상 머신에서 제네릭 타입 정보
연습문제

7장 컬렉션

7.1 컬렉션 프레임워크 개요
7.2 반복자
7.3 집합
7.4 맵
7.5 기타 컬렉션
___7.5.1 프로퍼티
___7.5.2 비트 집합
___7.5.3 열거 집합과 열거 맵
___7.5.4 스택, 큐, 덱, 우선순위 큐
___7.5.5 약한 해시 맵
7.6 뷰
___7.6.1 범위
___7.6.2 빈 뷰와 싱글턴 뷰
___7.6.3 수정 불가 뷰
연습문제

8장 스트림
8.1 반복에서 스트림 연산으로 전환하기
8.2 스트림 생성
8.3 filter, map, flatMap 메서드
8.4 서브스트립 추출과 스트림 결합하기
8.5 기타 스트림 변환
8.6 단순 리덕션
8.7 옵션 타입
___8.7.1 옵션 값을 사용하는 방법
___8.7.2 옵션 값을 사용하지 않는 방법
___8.7.3 옵션 값 생성하기
___8.7.4 flatMap으로 옵션 값 함수 합성하기
8.8 결과 모으기
8.9 맵으로 모으기
8.10 그루핑과 파티셔닝
8.11 다운스트림 컬렉터
8.12 리덕션 연산
8.13 기본 타입 스트림
8.14 병렬 스트림
연습문제

9장 입출력 처리하기

9.1 입력/출력 스트림, 리더와 라이터
___9.1.1 스트림 얻기
___9.1.2 바이트 읽기
___9.1.3 바이트 쓰기
___9.1.4 문자 인코딩
___9.1.5 텍스트 입력
___9.1.6 텍스트 출력
___9.1.7 바이너리 데이터 읽기/쓰기
___9.1.8 임의 접근 파일
___9.1.9 메모리 맵 파일
___9.1.10 파일 잠금
9.2 경로, 파일, 디렉터리
___9.2.1 경로
___9.2.2 파일과 디렉터리 생성하기
___9.2.3 파일 복사, 이동, 삭제
___9.2.4 디렉터리 엔트리 방문하기
___9.2.5 ZIP 파일 시스템
9.3 URL 커넥션
9.4 정규 표현식
___9.4.1 정규 표현식 문법
___9.4.2 하나 또는 모든 일치 대상 찾기
___9.4.3 그룹
___9.4.4 일치 항목 제거 또는 교체
___9.4.5 플래그
9.5 직렬화
___9.5.1 Serializable 인터페이스
___9.5.2 일시적인 인스턴스 변수
___9.5.3 readObject와 writeObject 메서드
___9.5.4 readResolve와 writeReplace 메서드
___9.5.5 버전 관리
연습문제

10장 병행 프로그래밍

10.1 병행 태스크
___10.1.1 태스크 실행하기
___10.1.2 퓨처와 실행자 서비스
10.2 스레드 안전성
___10.2.1 가시성
___10.2.2 경쟁 조건
___10.2.3 안전한 병행성을 실현하는 전략
___10.2.4 불변 클래스
10.3 병렬 알고리즘
___10.3.1 병령 스트림
___10.3.2 병렬 배열 연산
10.4 스레드 안전 자료 구조
___10.4.1 병행 해시 맵
___10.4.2 블로킹 큐
___10.4.3 기타 스레드 안전 자료 구조
10.5 원잣값
10.6 잠금
___10.6.1 재진입 가능 잠금
___10.6.2 synchronized 키워드
___10.6.3 조건 대기
10.7 스레드
___10.7.1 스레드 시작하기
___10.7.2 스레드 인터럽션
___10.7.3 스레드 로컬 변수
___10.7.4 기타 스레드 프로퍼티
10.8 비동기 계산
___10.8.1 사용자 인터페이스 콜백에서 오랜 시간 실행하는 태스크
___10.8.2 완료 가능한 퓨처
10.9 프로세스
___10.9.1 프로세스 생성하기
___10.9.2 프로세스 실행하기
연습문제

11장 애너테이션

11.1 애너테이션 사용하기
___11.1.1 에너테이션 요소
___11.1.2 다중 애너테이션과 반복 애너테이션
___11.1.3 선언부에 애너테이션 붙이기
___11.1.4 타입 사용에 애너테이션 붙이기
___11.1.5 수신자를 명확하게 지정하기
11.2 애너테이션 정의하기
11.3 표준 애너테이션
___11.3.1 컴파일용 애너테이션
___11.3.2 리소스 관리용 애너테이션
___11.3.3 메타 애너테이션
11.4 실행 시간에 애너테이션 처리하기
11.5 소스 수준 애너테이션 처리
___11.5.1 애너테이션 핸들러
___11.5.2 언어 모델 API
___11.5.3 애너테이션으로 소스 코드 생성하기
연습문제

12장 날짜와 시간 API

12.1 타임 라인
12.2 지역 날짜
12.3 날짜 조정기
12.4 지역 시간
12.5 구역 시간
12.6 서식 지정과 파싱
12.7 레거시 코드와 상호 동작하기
연습문제

13장 국제화

13.1 로케일
___13.1.1 로케일 지정하기
___13.1.2 기본 로케일
___13.1.3 표시 이름
13.2 숫자 형식
13.3 통화
13.4 날짜와 시간 서식 지정
13.5 컬레이션과 정규화
13.6 메시지 서식 지정
13.7 리소스 번들
___13.7.1 리소스 번들 구성하기
___13.7.2 번들 클래스
13.8 문자 인코딩
13.9 프레퍼런스
연습문제

14장 컴파일링과 스크립팅

14.1 컴파일러 API
___14.1.1 컴파일러 호출하기
___14.1.2 컴파일 태스크 실행하기
___14.1.3 메모리에서 소스 파일 읽기
___14.1.4 메모리에 바이트 코드 작성하기
___14.1.5 진단 정보 캡처하기
14.2 스크립팅 API
___14.2.1 스크립팅 엔진 얻기
___14.2.2 바인딩
___14.2.3 입력과 출력 재지정하기
___14.2.4 스크립팅 함수와 메서드 호출하기
___14.2.5 스크립트 컴파일하기
14.3 Nashorn 스크립팅 엔진
___14.3.1 명령줄에서 Nashorn 실행하기
___14.3.2 게터와 세터, 오버로드된 메서드 호출하기
___14.3.3 자바 객체 생성하기
___14.3.4 자바스크립트와 자바에서 문자열
___14.3.5 숫자
___14.3.6 배열 다루기
___14.3.7 리스트와 맵
___14.3.8 람다
___14.3.9 자바 클래스 확장과 자바 인터페이스 구현하기
___14.3.10 예외
14.4 Nashorn을 이용한 셸 스크립팅
___14.4.1 셸 명령 실행하기
___14.4.2 문자열 인터폴레이션
___14.4.3 스크립트 입력
연습문제
더보기접기

저자

ㆍ지은이 카이 호스트만

저자소개

전문 프로그래머와 컴퓨터 과학 학생들을 위해 12권도 넘는 책을 저술했다. 현재 산호세 주립 대학교의 컴퓨터 과학 교수이며 자바 챔피언이다.

저서

《가장 빨리 만나는 자바 8》(길벗, 2014), 《쉽게 배워서 빨리 써먹 는 스칼라 프로그래밍》(비제이퍼블릭, 2013)의 저자이자 《Core Java™, Volumes I and II, 10th Edition》(Prentice Hall, 2016) 의 주 저자이다. 


보도자료

연관 프로그램

아래 프로그램은 길벗출판사가 제공하는 것이 아닙니다.
무료로 사용할 수 있는 정보를 안내해 드리니, 지원이 필요하면 해당 프로그렘 제작사로 문의해 주세요.