책소개
하나, 〈헤드 퍼스트〉 시리즈만의 다채로운 구성으로 자바를 쉽고 재미있게 배울 수 있습니다.
글로만 가득 차 있는 두꺼운 자바 학습서에 지치셨나요? 『헤드 퍼스트 자바(3판)』는 〈헤드 퍼스트〉 시리즈의 특징인 친근한 대화체 스타일과 풍부한 시각 자료, 텍스트와 이미지를 함께 활용하여 뇌를 자극하는 학습법을 제안합니다. 각종 비유와 등장인물의 이야기를 따라가다 보면 어느새 자바에 대한 지식이 그림처럼 머릿속에 생생하게 새겨집니다.
둘, 개념을 이해하는 것을 넘어서 현업에서 활용할 수 있는 실전 능력을 기를 수 있습니다.
자바의 기초부터 심화 개념까지 모든 것을 상세하게 설명하고, 다양한 실전 예제를 바탕으로 실제 활용까지 나아갈 수 있는 실용적인 학습을 지향합니다. 단순히 개념을 설명하는 데 그치지 않고 자바를 사용하는 개발자들이 흔히 저지르는 실수, 자주 묻는 질문과 답변, 전문가의 친절한 조언 등을 바탕으로 실무 활용 능력을 극대화할 수 있습니다.
셋, 자바 버전 업데이트에 따른 개정 내용을 대응합니다.
개정판 이후로 자바 버전 업데이트에 따른 내용을 보완하고, 예제 코드와 부가 설명을 새 버전에 맞춰 수정하였습니다. 또한, 원서의 내용을 정확하게 반영하되 새로운 삽화를 더해 한국어판만의 맛을 살렸습니다. 『헤드 퍼스트 자바(3판)』 한 권이면 초보자부터 개발자까지 쉽고 편안하게 최신 버전의 자바를 배울 수 있습니다.
목차
Chapter 00 들어가며 | 이 책을 읽는 방법
__이 책의 독자
__이 책이 이렇게 된 이유
__이 책의 구성
__여러분의 두뇌를 정복하는 방법
__이 책을 읽는 데 필요한 것
__3판의 테크니컬 리뷰어
__3판을 위한 감사 인사
__개정판의 테크니컬 리뷰어
__개정판을 위한 감사 인사
__아직 감사의 글이 끝나지 않았습니다
Chapter 01 일단 간단하게 알아봅시다 | 껍데기를 깨다
__자바는 어떤 식으로 돌아갈까요?
__자바에서 실제로 수행하는 일
__아주 간략한 자바의 역사
__자바 코드의 구조
__main이 들어 있는 클래스 만들기
__간단한 불리언 테스트
__조건에 따른 분기문
__본격적인 실전용 애플리케이션 코딩하기
__자동 구문 생성기
__연습 문제
__정답과 해설
Chapter 02 클래스와 객체 | 객체 마을로의 여행
__의자 전쟁
__첫 번째 객체 만들기
__Movie 객체 만들어서 테스트하기
__빠르게 main에서 벗어나기
__숫자 맞히기 게임 실행하기
__연습 문제
__정답과 해설
Chapter 03 원시 변수와 레퍼런스 | 네 변수를 알라
__변수 선언하기
__“더블 모카로 주세요. 아, int로 합시다.”
__키워드를 조심하세요!
__Dog 객체를 제어하는 방법
__객체 레퍼런스는 단지 또 다른 변숫값에 불과합니다
__가비지 컬렉션 기능을 보유한 힙에서의 삶
__배열은 찬장의 컵과 같습니다
__Dog 예제
__연습 문제
__정답과 해설
Chapter 04 메서드는 인스턴스 변수를 사용합니다 | 객체의 행동 방식
__클래스는 객체가 아는 것과 객체가 하는 것을 기술합니다
__크기는 짖는 소리에 영향을 끼칩니다
__메서드에 특정 값을 전달할 수 있습니다
__메서드에서 특정 값을 리턴할 수도 있습니다
__메서드에 두 개 이상의 인자를 전달할 수도 있습니다
__매개변수와 리턴 타입 활용 방법
__캡슐화
__배열에 있는 객체는 어떤 식으로 행동할까요?
__인스턴스 변수 선언과 초기화
__원시 변수와 레퍼런스 변수 비교
__연습 문제
__정답과 해설
Chapter 05 프로그램 만들기 | 메서드를 더 강력하게
__〈스타트업 침몰시키기〉 게임 만들어 보기
__클래스 개발
__메서드를 구현해서 코드 작성하기
__SimpleStartup 클래스를 위한 테스트 코드 만들기
__checkYourself() 메서드
__SimpleStartupGame 클래스 준비 코드
__게임의 main() 메서드
__마지막 클래스: GameHelper
__for 반복문에 관하여
__향상된 for 반복문
__원시 타입 캐스팅
__연습 문제
__정답과 해설
Chapter 06 자바 API를 알아봅시다 | 자바 라이브러리 사용하기
__앞 장에서 버그를 남겨둔 채로 넘어왔습니다
__모두 잠에서 깨어나 라이브러리를 써 봅시다
__ArrayList로 할 수 있는 작업
__ArrayList와 일반 배열 비교
__진짜 〈스타트업 침몰시키기〉 게임 만들어 보기
__실제 StartupBust 클래스를 만들기 위한 준비 코드
__Startup 클래스의 최종 버전
__초강력 불리언 표현식
__라이브러리 사용하기(자바 API)
__코드 자석
__정답과 해설
Chapter 07 상속과 다형성 | 객체 마을에서의 더 나은 삶
__의자 전쟁 되돌아보기
__상속의 이해
__동물 시뮬레이션 프로그램의 상속 트리 설계하기
__상속을 더 많이 활용하는 방법 찾아보기
__‘A는 B다’와 ‘A에는 B가 있다’ 관계 활용하기
__상속 구조를 제대로 만들었는지 어떻게 알 수 있나요?
__상속을 활용해서 설계할 때 주의점
__계약 지키기: 오버라이드 규칙
__메서드 오버로딩
__연습 문제
__정답과 해설
Chapter 08 인터페이스와 추상 클래스 | 심각한 다형성
__이걸 설계할 때 뭔가 잊어버린 것은 없을까요?
__컴파일러는 추상 클래스의 인스턴스를 만드는 것을 허용하지 않습니다
__추상 vs. 구상
__추상 메서드는 모두 구현해야만 합니다
__다형성 활용하기
__어떤 것도 받아들일 수 있는 더 포괄적인 클래스를 만들면 어떨까요?
__개가 개처럼 행동하지 않으려고 할 때
__몇 가지 디자인 옵션 알아보기
__Pet 인터페이스 제작과 구현
__상위 클래스에 있는 버전의 메서드를 호출하는 방법
__연습 문제
__정답과 해설
Chapter 09 생성자와 가비지 컬렉션 | 객체의 삶과 죽음
__스택과 힙: 삶의 공간
__메서드는 스택에 차곡차곡 쌓입니다
__로컬 변수로 들어 있는 객체는 어떻게 되나요?
__기적과도 같은 객체 생성
__Duck 객체 만들기
__Duck을 쉽게 만들 수 있게 하는 방법
__인자가 없는 생성자는 컴파일러에서 항상 자동으로 만들어 주지 않나요?
__세부 리뷰: 생성자에 대해 반드시 알아야 할 네 가지
__객체의 일생에서 상위 클래스 생성자의 역할
__부모가 존재하기 전에 자식이 존재할 수 있을까요?
__레퍼런스 변수는요?
__연습 문제
__정답과 해설
Chapter 10 숫자와 정적 변수, 정적 메서드 | 숫자는 정말 중요합니다
__Math 메서드: 거의 전역 메서드입니다
__일반 메서드와 정적 메서드 사이의 차이점
__정적 변수 초기화
__Math 메서드
__원시 타입을 포장하는 방법
__거의 어디서든 쓸 수 있는 오토박싱
__반대로 원시 숫자를 String으로 변환하는 방법
__숫자 포매팅
__포맷 지시자
__연습 문제
__정답과 해설
Chapter 11 컬렉션과 제네릭 | 자료구조
__java.util API, 리스트와 컬렉션
__제네릭과 타입 안전성
__sort() 메서드 다시 보기
__업그레이드된 Song 클래스
__Comparator만 가지고 정렬하기
__람다를 가지고 주크박스 코드 고쳐 보기
__ArrayList 대신 HashSet을 써 볼까요?
__TreeSet에 관해 꼭 알아야 할 것들ㆍㆍㆍ
__List와 Set에 대해 배웠으니 이제 Map을 사용해 볼까요?
__드디어, 다시 제네릭으로
__연습 문제
__정답과 해설
Chapter 12 ‘어떻게’가 아니고 ‘무엇’을 | 람다와 스트림
__컴퓨터한테 우리가 무엇을 원하는지 알려 줍시다
__for 반복문이 잘못될 때
__스트림 API 소개
__스트림에서 결과 가져오기
__스트림 활용 가이드라인
__안녕, 나의 (별로 오래된 건 아니지만) 오랜 친구!
__함수형 인터페이스를 알아보는 법
__루 씨가 내준 숙제 #1: ‘록’ 음악 전부 찾아내기
__루 씨가 내준 숙제 #2: 모든 장르의 목록 구하기
__5분 미스터리
__정답과 해설
Chapter 13 예외 처리 | 위험한 행동
__음악 재생 프로그램 만들어 보기
__우선 Sequencer가 필요합니다
__예외도 객체입니다. Exception 타입의 객체지요
__try/catch 블록에서의 흐름 제어
__메서드에서 예외를 두 개 이상 던질 수도 있습니다
__catch 블록을 여러 개 사용할 때는 작은 것부터 큰 것으로 나열해야 합니다
__선언을 통해 회피하는 것은 불가피한 것을 잠시 미뤄 두는 것뿐입니다
__코드 키친
__버전 1: 첫 번째 사운드 애플리케이션 만들기
__버전 2: 명령행 인자를 써서 소리를 조절해 보기
__연습 문제
__정답과 해설
Chapter 14 GUI | 그래픽 이야기
__모든 것은 창에서 시작합니다
__사용자 이벤트를 받아들이는 방법
__리스너, 소스, 그리고 이벤트
__그림을 그리기 위한 위젯 만들어 보기
__paintComponent()로 할 수 있는 일
__프레임에 위젯을 두 개 이상 집어넣는 방법
__내부 클래스가 있습니다
__람다 구원 등판!
__내부 클래스를 써서 애니메이션 만들어 보기
__메시지/이벤트를 쉽게 만드는 방법
__연습 문제
__정답과 해설
Chapter 15 스윙 사용 방법 | 스윙을 알아봅시다
__스윙 구성요소
__레이아웃 관리자
__세 가지 대표적인 레이아웃 관리자
__스윙 구성요소 사용해 보기
__코드 키친
__비트박스 프로그램 만들기
__연습 문제
__정답과 해설
Chapter 16 직렬화와 파일 입출력 | 객체 저장
__직렬화된 객체를 파일에 저장하는 방법
__클래스를 직렬화할 수 있게 하려면 Serializable을 구현해야 합니다
__역직렬화: 객체 복구
__버전 ID: 직렬화를 할 때 주의할 부분
__String을 텍스트 파일에 저장하는 방법
__텍스트 파일을 읽는 방법
__QuizCardPlayer(코드 개요)
__Path, Paths, Files(디렉터리 처리)
__마지막으로, finally
__코드 키친
__비트박스 패턴을 저장하는 방법
__비트박스 패턴을 복구하는 방법
__연습 문제
__정답과 해설
Chapter 17 네트워킹과 스레드 | 연결하는 방법
__연결하기, 보내기, 받기
__DailyAdviceClient
__간단한 서버 애플리케이션 만들기
__자바에서는 스레드 여러 개를 사용할 수 있지만 Thread 클래스는 하나뿐입니다
__새로 만들어진 스레드의 세 가지 상태
__스레드를 대기 상태로 전환시키는 방법
__스레드를 두 개 이상 만들고 시작하는 방법
__스레드 풀 닫는 시간
__향상된 새 버전의 SimpleChatClient
__코드 자석
__정답과 해설
__코드 키친
Chapter 18 경쟁 상태와 불변 데이터 | 동시성 이슈 처리 방법
__코드로 만들어본 라이언과 모니카 문제
__객체의 자물쇠 사용법
__무시무시한 ‘갱신 손실’ 문제
__increment() 메서드를 원자적으로 바꿉니다. 동기화합니다!
__동기화의 치명적인 약점, 교착상태
__원자 변수를 이용한 CAS 연산
__불변 객체 사용법
__공유 데이터 관련된 또 다른 문제
__스레드 안전성을 갖춘 자료구조
__연습 문제
__정답과 해설
APPENDIX A 코드 키친 최종회
__마지막 비트박스 클라이언트 프로그램
__마지막 비트박스 서버 프로그램
APPENDIX B 거의 본문에 들어갈 뻔했던 내용, TOP 10
__#11 JShell (자바 REPL)
__#10 패키지
__#9 문자열과 래퍼의 불변성
__#8 접근 단계와 접근 변경자(누가 무엇을 볼 수 있는가)
__#7 가변인자
__#6 애너테이션
__#5 람다와 Map
__#4 병렬 스트림
__#3 열거형
__#2 로컬 변수 타입 추론(var)
__#1 레코드
찾아보기