1장. 껍질을 깨고
자바는 어떤 식으로 돌아갈까?
자바 코드의 구조
클래스를 해부합시다
main() 메소드
순환문
조건에 따른 분기문
‘맥주 99병’ 애플리케이션 코드
자동 구문 생성기
집중 토론: 컴파일러와 자바 가상 머신
연습문제와 퍼즐
2장. 객체 마을로의 여행
의자 전쟁(객체지향맨 브래드와 프로시저맨 래리)
상속(기초)
메소드를 오버라이드하는 방법(기초)
클래스 안에는 뭐가 있을까?(메소드, 인스턴스 변수)
첫번째 객체를 만들어봅시다
main()을 사용하는 방법
게임 코드 알아 맞추기
연습문제와 퍼즐
3장. 네 변수를 알라
변수 선언(자바에서는 유형을 까다롭게 따집니다)
원시 변수 유형
자바 키워드
레퍼런스 변수(객체에 대한 리모컨)
객체 선언과 대입
가비지 컬렉션 기능이 있는 힙에서의 객체
배열
연습문제와 퍼즐
4장. 객체의 행동
메소드와 객체의 상태
메소드 인자와 리턴 유형
값으로 전달
게터와 세터
캡슐화
배열에서 레퍼런스를 사용하는 방법
연습문제와 퍼즐
5장. 메소드를 더 강력하게
닷컴 가라앉히기 게임 만들기
간단한 닷컴 게임
준비 코드를 만들어봅시다(게임을 만들기 위한 유사코드)
간단한 닷컴 게임을 만들기 위한 테스트 코드
간단한 닷컴 게임 코드 작성
간단한 닷컴 게임 최종 코드
Math.random()으로 난수를 만들어내는 방법
명령행에서 사용자가 입력한 내용을 받아오기 위한 인스턴트 코드
for 순환문을 써서 순환시키는 방법
원시값을 더 큰 변수에서 작은 변수로 캐스팅하는 방법
Integer.parseInt()를 가지고 String을 int로 변환하는 방법
연습문제와 퍼즐
6장. 자바 라이브러리
간단한 닷컴 게임 버그 분석
ArrayList(자바 API를 활용하는 방법)
닷컴 클래스 코드 고치기
진짜 게임 만들기(닷컴 가라앉히기)
진짜 게임을 만들기 위한 준비 코드
진짜 게임을 만들기 위한 코드
부울 표현식
라이브러리(자바 API) 활용
패키지 사용 방법(import 선언문, 전체 이름)
HTML API 문서와 레퍼런스 서적을 활용하는 방법
연습문제와 퍼즐
7장. 객체마을에서의 더 나은 삶
상속의 이해(수퍼클래스와 하위클래스 사이의 관계)
상속 트리 설계(Animal 시뮬레이션)
중복된 코드를 피하는 방법(상속 활용 방법)
메소드 오버라이딩
"A는 B다" 관계와 "A에는 B가 있다" 관계(욕조 안의 아가씨)
수퍼클래스로부터 상속받는 것
상속 활용의 장점
다형성(하위클래스 객체에 대해 수퍼유형 레퍼런스를 사용하는 방법)
오버라이딩 규칙(인자와 리턴 유형은 건드리지 맙시다)
메소드 오버로딩(메소드명을 재활용하는 것뿐입니다)
연습문제와 퍼즐
8장. 심각한 다형성
인스턴스를 만들 수 없는 클래스
추상 클래스(인스턴스를 만들 수 없습니다)
추상 메소드(반드시 구현해야 합니다)
다형성을 실제로 활용하는 방법
Object 클래스(모든 클래스의 수퍼클래스)
ArrayList에서 객체를 꺼내는 방법(기본적으로 모두 Object 유형입니다)
컴파일러에서 레퍼런스 유형을 체크하는 방법
내부 객체
다형적 레퍼런스
객체 레퍼런스 캐스팅(상속 트리에서 아래로 내려가는 방법)
죽음의 다이아몬드(다중 상속에서 생길 수 있는 문제)
인터페이스 사용 방법
연습문제와 퍼즐
9장. 객체의 삶과 죽음
스택과 힙, 객체와 변수가 살아가는 곳
스택에 들어있는 메소드
지역 변수가 있는 위치
인스턴스 변수가 있는 위치
객체 생성
생성자(new를 실행하면 실행되는 코드)
새로운 Duck 객체의 상태를 초기화하는 방법
오버로드된 생성자
수퍼클래스 생성자
this()를 써서 오버로드된 생성자를 호출하는 방법
객체의 삶
가비지 컬렉션
연습문제와 퍼즐
10장. 숫자는 정말 중요합니다
Math 클래스
정적 메소드
정적 변수
상수(static final 변수)
Math 메소드(random(), round(), abs() 등)
래퍼 클래스(Integer, Boolean, Character 등)
오토박싱
숫자 포매팅
날짜 포매팅 및 조작
import static 구문
연습문제와 퍼즐
11장. 위험한 행동
음악 프로그램 만들기(비트박스)
위험한 코드를 호출해야 한다면 어떻게 해야 할까요?
예외를 통해 “뭔가 안 좋은 일이 생겼음”을 알 수 있습니다
컴파일러에서 위험 요소를 파악하고 있는지 확인해줍니다
try/catch를 써서 예외를 잡아내는 방법
try/catch 블록에서의 흐름 제어
finally 블록
여러 가지 예외를 잡아내는 방법
예외 선언
처리 또는 선언 규칙
코드 키친(소리를 만드는 방법)
연습문제와 퍼즐
12장. 그래픽 이야기
첫번째 GUI
사용자 이벤트
리스너 인터페이스 구현 방법
버튼의 ActionEvent를 받는 방법
GUI에 그래픽을 출력하는 방법
paintComponent()
Graphics2D 객체
화면에 버튼 두 개 이상을 집어넣는 방법
내부 클래스
애니메이션
코드 키친
연습문제와 퍼즐
13장. 스윙을 알아봅시다
스윙 구성요소
레이아웃 관리자
세 가지 레이아웃 관리자
BorderLayout
FlowLayout
BoxLayout
JTextField
JTextArea
JCheckBox
JList
코드 키친
연습문제와 퍼즐
14장. 객체 저장
객체의 상태를 저장하는 방법
직렬화된 객체를 파일로 저장하는 방법
자바의 입력과 출력 스트림
객체 직렬화
Serializable 인터페이스를 구현하는 방법
transient 변수를 사용하는 방법
객체를 역직렬화하는 방법
텍스트 파일에 쓰는 방법
java.io.File
텍스트 파일로부터 읽어오는 방법
split()을 써서 String을 토큰으로 나누는 방법
코드 키친
연습문제와 퍼즐
15장. 연결하는 방법
채팅 프로그램 개요
연결, 송신, 수신
네트워크 소켓
TCP 포트
Socket으로부터 데이터를 읽는 방법(BufferedReader 사용)
Socket으로 데이터를 쓰는 방법(PrintWriter 사용)
오늘의 조언 클라이언트 프로그램 만들기
간단한 서버 만들기
오늘의 조언 서버 코드
채팅 클라이언트 만들기
다중 호출 스택
새로운 스레드를 시작하는 방법
Runnable 인터페이스
새로운 Thread 객체의 세 가지 상태
실행 가능한 상태와 실행 중인 상태 사이의 전환
스레드 스케줄러
스레드를 중지시키는 방법
스레드 두 개를 만들어서 시작하는 방법
병행성 문제
라이언과 모니카의 병행성 문제를 코드로...
락을 거는 방법
모든 객체에는 락이 있습니다
공포의 ‘갱신 내용 손실’ 문제
동기화된 메소드
락을 해제할 수 없는 경우
멀티스레드를 사용한 ChatClient 코드
인스턴트 SimpleChatServer
연습문제와 퍼즐
16장. 자료구조
컬렉션
Collections.sort()를 이용한 ArrayList 정렬
제네릭과 형 안전성
Comparable 인터페이스를 구현하는 항목 정렬법
Comparator를 활용한 정렬법
컬렉션 API - 리스트, 집합, 맵
HashSet을 이용해서 중복을 피하는 법
hashCode() 및 equals() 오버라이딩
HashMap
다형성을 위한 와일드카드 활용
연습문제 및 퍼즐
17장. 코드를 배포합시다
배포 방법
소스 코드와 클래스 파일은 분리합시다
실행 가능한 JAR 파일을 만드는 방법
실행 가능한 JAR를 실행하는 방법
클래스를 패키지에 넣읍시다
패키지와 디렉토리 구조
패키지로 컴파일하고 실행하는 방법
-d 컴파일 옵션
실행가능한 JAR 파일을 만드는 방법(패키지)
웹을 통해 배포하기 위한 자바 웹 스타트(JWS)
JWS 애플리케이션을 만들어서 배포하는 방법
연습문제와 퍼즐
18장. 분산 컴퓨팅
자바 원격 메소드 호출(RMI), 자세한 예제
서블릿
엔터프라이즈 자바 빈즈(EJB)
지니
정말 훌륭한 범용 서비스 브라우저를 만드는 방법
끝
부록 A
마지막 비트박스 코드(클라이언트 코드)
마지막 비트박스 코드(서버 코드)
부록 B
Top 10 목록
찾아보기