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 레코드찾아보기