CHAPTER 4 조건문과 반복문 4.1 코드 실행 흐름 제어 4.2 조건문(if문, switch문) 4.3 반복문(for문, while문, do-while문)
CHAPTER 5 참조 타입 5.1 데이터 타입 분류 5.2 메모리 사용 영역 5.3 참조 변수의 ==, != 연산 5.4 null과 NullPointerException 5.5 String 타입 5.6 배열 타입 5.7 열거 타입
CHAPTER 6 클래스 6.1 객체 지향 프로그래밍 6.2 객체와 클래스 6.3 클래스 선언 6.4 객체 생성과 클래스 변수 6.5 클래스의 구성 멤버 6.6 필드 6.7 생성자 6.8 메소드 6.9 인스턴스 멤버와 this 6.10 정적 멤버와 static 6.11 final 필드와 상수 6.12 패키지 6.13 접근 제한자 6.14 Getter와 Setter 메소드 6.15 어노테이션
CHAPTER 7 상속 7.1 상속 개념 7.2 클래스 상속 7.3 부모 생성자 호출 7.4 메소드 재정의 7.5 final 클래스와 final 메소드 7.6 protected 접근 제한자 7.7 타입 변환과 다형성 7.8 추상 클래스
CHAPTER 8 인터페이스 8.1 인터페이스의 역할 8.2 인터페이스 선언 8.3 인터페이스 구현 8.4 인터페이스 사용 8.5 타입 변환과 다형성 8.6 인터페이스 상속 8.7 디폴트 메소드와 인터페이스 확장
CHAPTER 9 중첩 클래스와 중첩 인터페이스 9.1 중첩 클래스와 중첩 인터페이스란? 9.2 중첩 클래스 9.3 중첩 클래스의 접근 제한 9.4 중첩 인터페이스 9.5 익명 객체
CHAPTER 10 예외 처리 10.1 예외와 예외 클래스 10.2 실행 예외 10.3 예외 처리 코드 10.4 예외 종류에 따른 처리 코드 10.5 자동 리소스 닫기 10.6 예외 떠넘기기 10.7 사용자 정의 예외와 예외 발생 10.8 예외 정보 얻기
CHAPTER 11 기본 API 클래스 11.1 자바 API 도큐먼트 11.2 java.lang과 java.util 패키지 11.3 Object 클래스 11.4 Objects 클래스 11.5 System 클래스 11.6 Class 클래스 11.7 String 클래스 11.8 StringTokenizer 클래스 11.9 StringBuffer, StringBuilder 클래스 11.10 정규 표현식과 Pattern 클래스 11.11 Arrays 클래스 11.12 Wrapper(포장) 클래스 11.13 Math, Random 클래스 11.14 Date, Calendar 클래스 11.15 Format 클래스 11.16 java.time 패키지
CHAPTER 12 멀티 스레드 12.1 멀티 스레드 개념 12.2 작업 스레드 생성과 실행 12.3 스레드 우선순위 12.4 동기화 메소드와 동기화 블록 12.5 스레드 상태 12.6 스레드 상태 제어 12.7 데몬 스레드 12.8 스레드 그룹 12.9 스레드풀
CHAPTER 13 제네릭 13.1 왜 제네릭을 사용해야 하는가? 13.2 제네릭 타입(class〈T〉, interface〈T〉) 13.3 멀티 타입 파라미터(class〈K,V,…〉, interface〈K,V,…〉) 13.4 제네릭 메소드(〈T, R〉 R method(T t)) 13.5 제한된 타입 파라미터(〈T extends 최상위타입〉) 13.6 와일드카드 타입(〈?〉, 〈? extends …〉, 〈? super …〉) 13.7 제네릭 타입의 상속과 구현
CHAPTER 14 람다식 14.1 람다식이란? 14.2 람다식 기본 문법 14.3 타겟 타입과 함수적 인터페이스 14.4 클래스 멤버와 로컬 변수 사용 14.5 표준 API의 함수적 인터페이스 14.6 메소드 참조
CHAPTER 15 컬렉션 프레임워크 15.1 컬렉션 프레임워크 소개 15.2 List 컬렉션 15.3 Set 컬렉션 15.4 Map 컬렉션 15.5 검색 기능을 강화시킨 컬렉션 15.6 LIFO와 FIFO 컬렉션 15.7 동기화된 컬렉션 15.8 병렬 처리를 위한 컬렉션
CHAPTER 17 JavaFX 17.1 JavaFX 개요 17.2 JavaFX 애플리케이션 개발 시작 17.3 JavaFX 레이아웃 17.4 JavaFX 컨테이너 17.5 JavaFX 이벤트 처리 17.6 JavaFX 속성 감시와 바인딩 17.7 JavaFx 컨트롤 17.8 JavaFX 메뉴바와 툴바 17.9 JavaFX 다이얼로그 17.10 JavaFX CSS 스타일 17.11 JavaFX 스레드 동시성 17.12 화면 이동과 애니메이션
CHAPTER 18 IO기반 입출력 및 네트워킹 18.1 IO 패키지 소개 18.2 입력 스트림과 출력 스트림 18.3 콘솔 입출력 18.4 파일 입출력 18.5 보조 스트림 18.6 네트워크 기초 18.7 TCP 네트워킹 18.8 UDP 네트워킹
CHAPTER 19 NIO 기반 입출력 및 네트워킹 19.1 NIO 소개 19.2 파일과 디렉토리 19.3 버퍼 19.4 파일 채널 19.5 파일 비동기 채널 19.6 TCP 블로킹 채널 19.7 TCP 넌블로킹 채널 19.8 TCP 비동기 채널 19.9 UDP 채널
‘이것이 자바다’는 비전공자로 국비지원 학원에서 자바를 시작하면서 교재로 사용한 책이다. 학원을 다니기 전에 자바를 독학할 때 ‘자바의 정석(2판)’을 봤었는데, 고등학교 때 보던 수학의 정석의 악몽이 생각나던 스타일이었다. 그만큼 정석적으로 자바에 대해서 상세하게 잘 설명한 책이기도 하지만 책의 표지만큼 딱딱했던 느낌을 지울 수 없었다. 그러나 ‘이것이 자바다’는 표지부터 세련되었다. 흰 바탕에 우주항공에서 나올 법한 스케치 그림과 파란색 타이틀은 시원하면서도 뭔가 있구나 싶었다. 아마 학원에서 공부를 막 시작했던 설렘을 담아서 그랬던 것일지도 모르겠다. 처음 책을 보면 저자소개와 서문, 목차부터 보게된다. 저자 신용권씨는 20년이 넘은 경력을 가진 개발자고 삼성멀티캠퍼스 자바 전임교수를 거쳐 현재는 SK Planet에서 운영하는 T 아카데미에서 강사로 활동 중이시다. 실무 경험과 탄탄한 강사 커리어를 겸비하셔서 그런지 여러 노하우들이 책 속에 베어있다.
이 책은 2권으로 구성되어있는데 목차를 보면 1권에는 언어의 기본 문법과 자바의 핵심인 JVM 메모리 구조와 OOP를 구현하는 클래스, 인터페이스 등을 설명한다. 2권에서는 Advanced한 개념으로 컬렉션 프레임워크와 쓰레드, NIO 등이 나온다. 특히 자바의 정석에서는 없던 JavaFX와 자바8 문법도 설명해줘 더 좋았던 것 같다.
책도 쉽게 읽히고 정리하기에도 편하게 개념을 설명해준다. 개인적으로 헤드퍼스트 시리즈는 이샇안 스토리를 엮으면서 개념을 정리하기 힘들었었는데 ‘이것이 자바다’는 아주 좋았다. 블로그 글도 대부분 이 책을 참고한 것이다. 특히, 참조 객체 파트로 들어가면서 육각형으로 표현된 메모리 주소를 통해 값이 아닌 주소를 참조하는 것에 대해 잘 설명하고 있다. 당시에는 잘 몰랐던 JVM 구조에 대해서 알 수 있었다. (얼마나 중요한 개념이었는지는 나중에야 알았다.) 지금은 자바 개발자로 일하고 있지만, 무언가 부족함을 느낄 때 항상 책을 찾아보게 된다. 그 어떤 구글링을 통해 보는 글 보다 잘 정리되어 있다. (물론 더 깊게 알기 위해해선 구글링도 필요하다!)
당시에는 이용하지 않았지만, 저자가 운영하는 카페에서 인터넷 강의도 있고 질문에 답변도 잘 달아주신다. 또, 이벤트를 통해 프로그래밍 콘테스트 같은 것도 하고 있어 혼자 공부하는 사람들에게도 동기부여가 되어 끝까지 공부할 수 있게 도와준다.
자바를 시작한다면 꼭 읽어보라고 권해주고 싶은 책이다. 읽고나면 아, 이것이 자바구나라고 탄성을 자아내는 책이다.