프로그래밍 언어에 대한 학습경험이 전혀 없는 독자를 대상으로 집필되었다. 그러나 타 언어에 대한 학습경험이 있다면, 그만큼 빠른 속도로 이 책의 내용을 학습할 수 있다. 그리고 이미 JAVA를 공부한 경험이 있음에도 불구하고 부족함을 느끼는 독자들도 JAVA의 기초체력을 다질 수 있다.
이론뿐만 아니라 실습에 있어서도 부족함이 없도록 집필되었다. 특히 이론으로 다져진 지식을 바탕으로 단계별로 프로젝트를 진행함으로서 JAVA에 대한 지식이 이론으로 끝나지 않도록 유도한다. 이 책은 JAVA의 다양한 영역을 공부하는 데 있어 튼튼한 기본을 다질 수 있는 기본에 충실한 도서이다.
이 책은 총 25개의 Chapter로 구성이 되었다. Chapter 사이사이에 문법의 이해를 점검하고, 기본적인 코딩실력을 향상시킬 수 있는 충분한 양의 연습문제가 삽입되어 있으며, 책 중반부터는 총 9단계로 진행이 되는 단계별 프로젝트가 9개의 Chapter에 걸쳐서 소개한다.
윤성우
벤처회사에서 개발자로 일하다가 IT분야의 집필과 강의로 처음 이름이 알려진 그는 2000년대 초반까지는 소프트웨어 아키텍트(Architect)로 일을 하다가, 2004년부터 지금까지 OpenGL-ES 그래픽스 라이브러리의 구현과 3D 가속 칩의 개발 및 크로노스 그룹(모바일 국제 표준화 컨소시엄)의 표준안에 관련된 일에 참여하였다.
또한 핸드폰용 DMB 칩의 개발에도 참여하였으며, 현재는 ㈜액시스소프트의 CTO로 있으면서 웹 기반 솔루션 개발에 관심을 갖고 있다. 시간이 날 때마다 조깅을 하며 다양한 구상을 하는 저자는, 방법론에 근거한 소프트웨어 설계 전문가가 모든 분야에서 활발히 활동하여 소프트웨어 발전에 기여해야 한다는 생각을 갖고 있다.
Chapter 01. Let's Start JAVA!
01-1. 자바의 세계로 오신 여러분을 환영합니다.
01-2. 자바 프로그램의 이해와 실행의 원리
01-3. 첫 번째 자바 프로그램의 관찰과 응용
01-4. 컴파일의 대상에서 제외되는 주석!
Chapter 02. 변수(Variable)와 자료형(Data Type)
02-1. 변수의 이해와 활용
02-2. 정수 표현방식의 이해
02-3. 실수 표현방식의 이해
02-4. 자료형의 이해
Chapter 03. 상수와 형 변환(Type Casting)
03-1. 자료형을 기반으로 표현이 되는 상수
03-2. 자료형의 변환
Chapter 04. 연산자(Operator)
04-1. 자바에서 제공하는 이항 연산자들
04-2. 자바에서 제공하는 단항 연산자들
04-3. 비트와 관련이 있는 연산자들
Chapter 05. 실행흐름의 컨트롤
05-1. if 그리고 else
05-2. switch와 break
05-3. for, while 그리고 do~while
05-4. continue & break
05-5. 반복문의 중첩
Chapter 06. 메소드와 변수의 스코프
06-1. 메소드에 대한 이해와 메소드의 정의
06-2. 변수의 스코프
06-3. 메소드와 재귀호출
Chapter 07. 클래스와 인스턴스
07-1. 클래스의 정의와 인스턴스의 생성
07-2. 생성자(Constructor)
07-3. 자바의 이름 규칙(Naming Rule)
Chapter 08. 클래스 패스와 패키지
08-1. 클래스 패스(Class Path)의 지정
08-2. 패키지(Package)의 이해
Chapter 09. 접근제어 지시자와 정보은닉, 그리고 캡슐화
09-1. 정보은닉(Information Hiding)
09-2. 접근제어 지시자(Access Control Specifiers)
09-3. public 클래스와 default 클래스
09-4. 어떤 클래스를 public으로 선언할까요?
09-5. 캡슐화(Encapsulation)
Chapter 10. 클래스 변수와 클래스 메소드
10-1. static 변수(클래스 변수)
10-2. static 메소드(클래스 메소드)
10-3. System.out.printIn & public static void main
Chapter 11. 메소드 오버로딩과 String 클래스
11-1. 메소드 오버로딩(Overloading)
11-2. String 클래스
11-3. API Document의 참조를 통한 String 클래스의 인스턴스 메소드 관찰
11-4. StringBuilder & StringBuffer 클래스
11-5. 단계별 프로젝트: 전화번호 관리 프로그램 01단계
Chapter 12. 콘솔 입력과 출력
12-1. 콘솔 출력(Console Output)
12-2. 콘솔 입력(Console Input)
12-3. 단계별 프로젝트: 전화번호 관리 프로그램 02단계
Chapter 13. 배열(Array)
13-1. 배열이라는 존재가 필요한 이유
13-2. 1차원 배열의 이해와 활용
13-3. 다차원 배열의 이해와 활용
13-4. for-each
13-5. main 메소드로의 데이터 전달
13-6. 단계별 프로젝트: 전화번호 관리 프로그램 03단계
Chapter 14. 클래스의 상속 1: 상속의 기본
14-1. 상속은 재활용 + 알파(a)
14-2. 상속의 기본문법 이해
14-3. 상속과 접근제어 지시자
14-4. static 변수(메소드)의 상속과 생성자의 상속에 대한 논의
Chapter 15. 클래스의 상속 2: 오버라이딩
15-1. 상속을 위한 관계
15-2. 하위 클래스에서 메소드를 다시 정의한다면?
15-3. 참조변수의 인스턴스 참조와 instanceof 연산자
Chapter 16. 클래스의 상속 3: 상속의 목적
16-1. 개인정보 관리 프로그램
16-2. 모든 클래스가 상속하는 Object 클래스
16-3. final 클래스와 final 메소드
16-4. 단계별 프로젝트: 전화번호 관리 프로그램 04단계
Chapter 17. abstract와 interface 그리고 inner class
17-1. abstract 클래스
17-2. interface
17-3. Inner 클래스
17-4. Local 클래스와 Anonymous 클래스
17-5. 단계별 프로젝트: 전화번호 관리 프로그램 05단계
Chapter 18. 예외처리(Exception Handling)
18-1. 예외처리에 대한 이해와 try~catch문의 기본
18-2. 프로그래머가 직접 정의하는 예외의 상황
18-3. 예외 클래스의 계층도
18-4. 단계별 프로젝트: 전화번호 관리 프로그램 06단계
Chapter 19. 자바의 메모리 모델과 Object 클래스
19-1. 자바 가상머신의 메모리 모델
19-2. Object 클래스
Chapter 20. 자바의 다양한 기본 클래스
20-1. Wrapper 클래스
20-2. BigInteger 클래스와 BigDecimal 클래스
20-3. Math 클래스와 난수의 생성, 그리고 문자열 토큰(Token)의 구분
Chapter 21. 제네릭(Generics)
21-2. 제네릭 클래스의 이해와 설계
22-2. 제네릭을 구성하는 다양한 문법적 요소
Chapter 22. 컬렉션 프레임워크(Collection Framework)
22-1. 컬렉션 프레임워크의 이해
22-2. Collection 인터페이스를 구현하는 제네릭 클래스들
22-3. Set 인터페이스를 구현하는 컬렉션 클래스들
22-4. Map 인터페이스를 구현하는 컬렉션 클래스들
22-5. 단계별 프로젝트: 전화번호 관리 프로그램 07단계
Chapter 23. 쓰레드(Thread)와 동기화
23-1. 쓰레드의 이해와 생성
23-2. 쓰레드의 특성
23-3. 동기화(Synchronization)
23-4. 새로운 동기화 방식
Chapter 24. 파일과 I/O 스트림
24-1. File I/O에 대한 소개
24-2. 필터 스트림의 이해와 활용
24-3. 문자 스트림의 이해와 활용
24-4. 스트림을 통한 인스턴스의 저장
24-5. Random Access 파일과 FILE 클래스
24-6. 단계별 프로젝트: 전화번호 관리 프로그램 08단계
Chapter 25. Swing 컴포넌트와 이벤트 핸들링
25-1. Swing을 시작하기에 앞서
25-2. Swing 컴포넌트와 이벤트 핸들링
25-3. 레이아웃 매니저(Layout Manager)
25-4. 이벤트와 이벤트 리스너(Event Listener)
25-5. 다양한 Swing 컴포넌트
25-6. 단계별 프로젝트: 전화번호 관리 프로그램 09단계
객체지향적 접근이 매우 탄탄합니다.
본 도서의 장점 중 하나는 모든 내용이 매우 유기적으로 연결되어 있다는 것이다. 이러한 특징은 객체지향을 설명하는 부분에서 매우 두드러지는데, 책을 읽는 독자는 저자가 유도하는 흐름적 이해에 깊이 빠져들수록 자바에 대한 이해도가 매우 높아질 것이다. 따라서 반복 학습을 통해서 저자가 전달하고자 하는 내용을 하나도 빠짐 없이 이해하기 바란다.
기본서 다운 기본서
본서에서는 보통의 자바 기본서에서 간단히 언급하거나, 초급 자바 개발자들 조차 개념적으로 부족할 수 있는 부분을 매우 효율적으로 언급하고 있다. 기본서라면 많은 것을 가르쳐주기 보다는 반드시 알아야 할 내용을 깊이 이해할 수 있도록 도와야 한다고 생각한다. 그런 측면에서 이 책은 가장 기본서 다운 기본서가 아닌가 생각한다.
책의 가치를 더욱 높이는 단계별 프로젝트
저자가 오래 전부터 학생들에게 고집스럽게 강조해온 것 중 하나가 "단계별 프로젝트"이다. 이것을 저자의 의도대로 마지막까지 완성하기 위해서는 적지 않은 노력이 필요하다. 그러나 이는 책의 저자가 여러분에게 선사하는 매우 소중한 선물이다. 그리고 이 선물로 인해서 책의 가치는 한층 더 높아졌다고 생각한다. 프로그래머가 되는 것이 목표라면, 이것을 반드시 완성하자. 단계별 프로젝트의 완성은 여러분에게 크나큰 자신감을 안겨줄 것이다.
저자와 감수자가 동시에 강조하는, 자바 기본서가 반드시 갖춰야 할 특징 몇 가지를 정리해 보면 다음과 같다. 많은 것을 알려주는 것도 중요하지만, 많은 것을 스스로 알아갈 수 있는 능력을 향상시키는 것이 더 중요하다. 자바 프로그래머의 프로그램 개발에 있어서 필수요소인 자바 API 문서의 참조를 최대한 유도해야 한다. 다양한 클래스 설계에 대한 기회를 제공해야 하며, 프로젝트에 대한 간접 경험의 기회를 제공해야 한다. 이론으로만 끝나는 객체지향이 아니라, 실제 적용에 있어서의 객체지향을 설명하고 객체지향과 자바문법에 대한 설명이 하나로 연계되어야 한다. 본 도서는 위의 사항을 충분히 반영한 저자 나름의 고집을 충분히 담아낸 책이라고 생각이 된다. 때문에 자바의 탄탄한 기본을 필요로 하는 많은 독자들에게 큰 도움이 될 것이다.