이번에 시나공에서 새롭게 출판된 <자바를 다루는 기술 - 실무에서 알아야 할 기술은 따로 있다!, 이하 (자다기)>를 읽으면서, 정말 오랜만에 다시 JAVA를 접하게 됐다. 학부생 시절, JAVA를 활용한 안드로이드 프로그래밍, JSP 웹 프로그래밍등으로 인해 매일 이클립스와 싸움을 했지만, 벌써 3년이나 지났기 때문에 머릿 속에서 가물가물해져버렸다. JAVA도 언어인 만큼 쓰지 않으면 머릿 속에서 사라지게 된다. 그렇기 때문에 그 감을 잃지 않기 위한 노력을 기울여야 하는데, <자다기>를 탐독하면서 다시 한번 JAVA에 대한 감을 살릴 수 있었다. 책을 완벽하게 처음부터 끝까지 정독 하지는 않았고, 객체 지향 특유의 몇몇 개념을 리마인드 시키는데 주안점을 두고 읽었다. [객체 지향 프로그래밍을 향한 첫걸음] JAVA는 객체 지향 언어의 하나다. JAVA를 비롯한 객체 지향 언어를 활용하는 객체 지향 프로그래밍은 기본 개념 - 예를 들어 객체와 클래스에 대한 기본 적인 이해를 시작으로, 상속, 다형성과 같은 개념들 - 을 잡는 것 부터가 상당히 난해하게 느껴질 수 있다. 복습을 통한 이해만이 해당 개념을 올바르게 이해하는 유일한 방법이라고 생각한다. 따라서 앞서 밝힌 것힌 것 처럼, <자다기>를 읽으면서 객체 지향 개념을 리마인드 시키는 데 주안점을 두고 가볍게 읽었다. 생각보다 쉽게 읽히는 까닭에, JAVA를 처음 접하는 사람들이 읽더라도 큰 무리는 없겠다는 생각이 들었다. 분명 처음 접하는 이들에게는 약간의 어려움이 분명 존재재 할텐데, 분명한 건 반복 학습 이라고 이야기 해주고 싶다. <자다기>에서는 개념 이해를 위해서, 핵심 원리를 그림과 함께 수록하고 있으며, 쉬운 예제 설명을 위해서 용어 하나하나 친절하게 설명하고 있다. 또한 중간 중간 Knowhow 를 통해서 자바 프로그래머가 현장 경험을 통해 얻어낸 노하우를 전수하고 있다. [현장 중심의 입문서] <자다기>는 현장 밀착 입문서를 표방하고 있다. 단순한 입문서가 아니라, 이와 더불어 현장 밀착 이라는 단어를 함께 달고 있다. 제목에서 유추 가능하듯 단순히 문법만을 학습하는 것이 아닌, 실제 코딩이나 프로젝트에서 활용할 수 있는 오픈 소스 라이브러리에 대한 정보도 함께 오픈 API에 대한 언급도 잠깐 등장한다. 오픈 소스 라이브러리와 API의 경우, 그 양이 어마어마 하기 때문에 상세하게는 다루지는 않고 있고, 간단한 예제를 통한 학습으로 맛만 보여주고 있다. 그러나, 간단하게 맛을 보는 것 만으로도 상당히 많은 도움이 되리라 생각된다. 특정 소스에 대한 학습이 아니라, 어떤 API를 만나더라도 당황하지 않는 자세를 갖는 것이 중요하니 말이다. 인터넷이라는 정보의 바다 속에서 우리에게 필요한 코드를 찾고, 그 코드를 현재 내가 진행 중인 프로젝트에 알맞도록 수정하는 것 또한 코딩을 잘 하는 하나의 방법이 될 수 있다. 따라서 기존에 공개되어 있는 라이브러이나 API를 적재 적소에 활용하는 것 또한 굉장히 중요하다고 하다. 분권의 2번째 책에서는 오픈 소스 라이브러리에 대한 팁을 제공하는 점은 굉장히 인상적이었다. 또한 과거 시나공 수험서들을 읽으면서 느꼈던 분권의 위대함을 새삼 다시 느껴 볼 수 있는데, 시중에서 절찬리에 판매되는 JAVA 서적들은 굉장히 두꺼워서 휴대성이 떨어지는 것과 비교해서, 관련 부분의 대한 학습을 위해서 따로 지면을 할애한 점과 해당 부분을 분권으로 출판한 것은 탁월한 선택이라 생각된다. <자다기>는 입문서인 만큼 처음 JAVA를 시작하는 사람들에게 안성맞춤이다. 대부분 JAVA를 처음 배우는 사람들이 학생인 것을 고려했을 때, 가방에 들어가는 무게를 줄여주기 위해서 분권을 선택한 점은 칭찬받아 마땅하다. 사소하지만 이런 것에서 부터 출판사가 고객 만족을 실천하고 있구나 라는 생각을 해본다. 또한, 입문서 답게 JAVA 특유의 객체 지향 개념에 대해서 쉽게 설명하고 있으며, API의 활용을 통해서 현장에서 JAVA을 이용한 코딩이 어떻게 이루어 지는 지에 대한 팁도 제공하고 있다. JAVA 개발자로 가기 위한 첫걸음으로 <자바를 다루는 기술 - 실무에서 알아야 할 기술은 따로 있다!>을 조심스럽게 추천해본다. JAVA 개발자도 아니고 SW 현장에서 일을 하고 있지는 않지만, 앞서 JAVA를 비롯한 몇몇 언어를 학습해 본 입장에서 덧붙여 보자면, 단순히 문법서를 한번 읽고 해당 언어를 다 이해 하겠다는 것은 분명 과욕이다. 문법서는 말그대로 문법에 대한 설명이 수록되어 있는 책이다. 실제로 문법을 활용해서 프로젝트, 혹은 과제 등을 수행할때 비로소 언어에 대해서 조금씩 이해를 할 수 있다.
자바 언어의 기초 문법을 친절하고 자세하게 설명한다. 객체 지향 프로그래밍 개념은 물론, 자바의 자료구조, 제네릭(generics), 리플렉션(reflection) 등 고급 응용 기법들을 다양한 예제를 통해 익힐 수 있도록 구성하였다. 또한 저자의 실무 경험 속에서 얻은 노하우와 팁들을 제시하고, 오픈 소스 라이브러리 응용법 등을 통해 실무 적응력을 높여 독자들이 다양한 개발 현장에서 자바 프로젝트를 어려움 없이 수행할 수 있도록 하는데 이 책의 목적을 두었다.
[VOL.1 목차]
첫째마당 자바 개발자가 꼭 알아야 할 기본기 다지기
1장 이클립스로 시작하는 자바 첫걸음
01 개발자에게 사랑받는 언어, 자바와 친해지기
- 자바 언어에 대한 소개
- 자바의 여섯 가지 특징
02 자바에서 JVM의 역할은 무엇일까·
- 자바 실행을 위한 가상 서버
- 구조로 알아보는 JVM의 동작 원리
03 JDK 설치하고 환경 변수 설정하기
- 자바 개발 도구 JDK 설치
- 편리한 개발 환경을 위한 환경 변수 설정
04 프로그래밍의 시작, Hello World 예제를 만들어 보자
- HelloWold.java 실행하기
- 동작 원리 분석
05 실무에 적합한 개발 도구, 이클립스와 친해지자
- 이클립스 설치 따라하기
- 이클립스 화면 구성
- 프로젝트 만들기
2장 자바 프로그래밍을 위한 변수와 데이터형
01 변수, 제대로 알고 넘어가자
- 변수의 선언과 사용
- 모두를 위한 변수명 규칙
02 데이터형의 종류와 사용법 익히기
- 정수를 담기 위한 정수형
- 명시적 선언을 위한 정수 리터럴
03 char형이 곧 문자형이다
04 부동 소수형 이해하기
- float과 double
- 부동 소수형 리터럴
05 불리언형과 참조형 변수도 잊지 말자
- 참 또는 거짓, 불리언 형
- 참조형 변수
06 형 변환으로 데이터 형태를 변경하자
07 JVM에 저장된 데이터 위치 확인하기
[Knowhow] null 키워드로 메모리를 효율적으로 관리하자!
3장 자바에서 사용하는 연산자 & 연산
01 기본 연산자 익히기
- 대입 연산자
- 사칙 연산을 위한 산술 연산자
- 간결한 코드 작성을 위한 단항 연산자
- 다양한 비교를 위한 비교 연산자
02 논리 연산자와 비트 연산자 익히기
- true/false 판단을 위한 논리 연산자
- 2진수 연산을 위한 비트 연산자
03 알아두면 편리한 시프트 연산자와 3항 연산자
- 시프트 연산자
- 조건식을 간단하게 해주는 3항 연산자
04 String을 사용한 기본 문자열 연산 익히기
- 문자열 연산을 위한 기본 메소드
- 문자열을 비교하는 방법
- 특정 문자열의 위치 파악
- 문자열로 형 변환하는 법
- 특정 형식으로 문자열 포매팅하는 법
- 포맷 지시자
[Knowhow] 자바 개발자는 Java doc을 활용할 줄 알아야 한다
4장 자바에서 사용하는 조건문 & 반복문
01 논리적인 흐름 제어를 위한 if 조건문 만들기
- if 조건문
- 중첩된 if 구문
- 변수의 유효 범위를 지정하는 중괄호
02 논리 흐름 제어를 위한 또 다른 방법, switch-case 조건문
- Switch 구문의 사용 방법
- String형을 반환하는 조건문
03 for, while, do-while 반복문 비교하기
- for 반복문
- while과 do-while 구문
04 continue와 break 키워드로 흐름 제어하기
- 무한 반복 탈출을 위한 break 키워드
- 다음 루프로 넘어가는 continue 키워드
[Knowhow] 버그를 줄여주는 코딩 습관을 들이자
[Knowhow] 이클립스에서 error와 warning을 없애자
[Knowhow] 이클립스에서 포매터를 사용하자
둘째마당 객체 지향 자바, 내 것으로 만들기
5장 객체 지향 프로그래밍의 시작
01 클래스와 객체, 인스턴스 개념 구별하기
- 객체는 무엇인가·
- 기능 명세서와 같은 클래스
- 인스턴스란·
02 클래스를 구성하는 메소드와 생성자, 그리고 속성
- 클래스를 구성하는 핵심 요소
- 명령 구문들의 묶음인 메소드
- 메소드 사용 방법
- 객체를 생성하기 위한 특별한 메소드, 생성자
03 속성으로 객체의 상태 표현하기
- 클래스 속성의 선언과 사용
04 package와 import 키워드로 명시적 선언하기
- 소속을 밝히는 package 키워드
- 참조를 위한 import 키워드
05 객체 지향 프로그램 설계하기
- 추상화, 객체를 설계하는 기초 단계
- 부모-자식 관계를 맺는 상속
- 캡슐화, 관련된 것들을 따로 모은 클래스
- 다형성
[Knowhow] 코딩할 때 지켜야 하는 명명 규칙
6장 객체 지향 프로그래밍, 한 걸음 더!
01 상속을 알아야 유연한 설계를 할 수 있다
- 상속 관계임을 알려주는 extends 키워드
- 상속은 언제, 왜 사용할까·
- 다중 상속 vs 단일 상속
- 클래스의 조상, Object 클래스
[Knowhow] 이클립스에서 클래스 상속 구조를 파헤쳐보자
02 오버로딩과 오버라이딩 기법 구분하기
- 다형성을 구현하는 오버로딩
- 재정의를 가능하게 해주는 오버라이딩
03 super와 this 키워드를 사용해 명시적으로 객체 지칭하기
- super와 this 키워드 정의
04 객체 형 변환하기
- 업캐스팅과 다운캐스팅
- instanceof 키워드
- 객체끼리 비교하는 3가지 방법
05 제어자로 특별한 의미 부여하기
- 접근 제어자(public, default, protected, private)
- 수정을 금지하는 final 제어자
- static 제어자
06 클래스를 디자인하는 방법1 : 추상 클래스
- Abstract 키워드와 추상 클래스
07 클래스를 디자인하는 방법2: 인터페이스
- 메소드 선언부만 존재하는 인터페이스
- 인터페이스의 다중 상속
- 인터페이스를 사용하는 이유
08 클래스 안의 클래스 선언하기
- 인스턴스 내부 클래스
- 정적 내부 클래스
- 지역 내부 클래스
- 일회용으로 사용되는 익명 클래스
[Knowhow] 메모리 사용을 줄이기 위한 StringBuffer 클래스
7장 자바의 자료구조 : 배열과 컬렉션
01 배열로 다수의 객체 관리하기
- 멤버 객체 접근을 위한 index
- 다차원 배열 사용법
- 배열의 형 변환
Knowhow 난수를 만들어주는 Random 클래스
02 자바에는 컬렉션이라는 편리한 것이 있다 1
- 컬렉션 프레임워크의 핵심 인터페이스들
- 자바 기본 인터페이스인 Collection 인터페이스
- 순차 처리를 위한 List 인터페이스
- List 인터페이스를 구현하는 ArrayList와 Vector 클래스
03 자바에는 컬렉션이라는 편리한 것이 있다 2
- 비중복 처리를 위한 Set 인터페이스
- HashSet 구현 클래스
- Key/Value 데이터 관리를 위한 Map 인터페이스
- 컬렉션과 관련 있는 알고리즘
- 반복 처리를 위한 Iterator와 Enumeration
[Knowhow] NullPointerException 에러를 방지하는 세 가지 방법
[Knowhow] Value Object 디자인 패턴과 Get/Set 메소드
[Knowhow] 이클립스에서 get/set 메소드 편하게 선언하기
8장 예외 상황을 처리하는 기술
01 프로그램 실행 중 발생하는 예외
- 예외 처리 맛보기
02 try-catch-finally 구문만 알면 된다
- try-catch-finally 구문 사용법
03 Throwable 클래스와 계층도 이해하기
- 자바에서 제공하는 오류 관련 클래스
- 오류 클래스의 조상, Throwable 클래스
- 예외 처리에서 사용되는 스택
- 예외들의 집합, Exception 클래스
04 throws와 throw 키워드로 예외 던지기
- throw 키워드로 새로운 예외 던지기
- throws 키워드로 발생한 예외 다시 던지기
05 새로운 Exception 클래스 생성하기
06 처리해야 할 예외와 처리하지 않는 예외 구분하기
[Knowhow] 무조건적인 예외 처리는 좋은 것일까·
9장 협력해서 더 빠르게! 멀티 스레딩
01 스레드 프로그래밍을 시작하기에 앞서
- 이해하고 넘어가야 할 용어들
- 스레드 생성을 위한 Thread 클래스와 Runnable 인터페이스
- run( ) 메소드와 start( ) 메소드
- 싱글 스레드 vs 멀티 스레드
02 스레드 직접 만들고 다뤄보기
- Thread 클래스와 생성자
- 스레드 상태 전이도
- 스레드 스케줄러가 하는 일
- 스레드의 우선 순위와 실행 시간
03 스레드 종료하기
- 스레드 강제 종료
- 인터럽트가 발생했을 경우
- 데몬 스레드
04 스레드 그룹으로 스레드 한 번에 제어하기
05 멀티 스레딩의 핵심, 스레드 동기화하기
- 공유 자원 동시에 사용할 경우 발생하는 문제
- 해결책 : 동기화
- 은행 서비스 구현 예제
- 동기화의 부작용 : 병목 현상
06 폴링과 인터럽트 방식 구현하기
- Producer - Consumer 패턴
- 스레드를 제어하는 wait( ), notify( ), notifyAll( ) 메소드
[Knowhow] 오류: 기본 클래스 ····을(를) 찾거나 로드할 수 없습니다 가 나올 때!
10장 JVM의 핵심, 자바 클래스 로더
01 자바는 동적으로 클래스를 읽어온다
- 동적 클래스 로딩
- 클래스 네임스페이스
02 질서정연하게 클래스를 로딩하는 클래스 로더
- 델리게이션 모델
- URL 클래스 로더
- 사용자 정의 클래스 로더
11장 동적인 프로그래밍을 위한 리플렉션 기법
01 리플렉션으로 클래스 정보 확인하기
02 클래스 파일의 정보를 얻기 위한 java.lang.Class
- Class 객체 생성하는 방법
- Class 클래스에서 제공하는 메소드들
03 java.lang.reflect 패키지에서 제공하는 클래스들
- 생성자를 의미하는 Constructor 클래스
- 특정 메소드를 가리키는 Method 클래스
- 클래스 변수를 의미하는 Field 클래스
12장 다형성을 위한 제네릭 기법
01 제네릭 기법으로 클래스 디자인하기
- 제네릭의 특징
02 와일드 카드와 다이아몬드 지시자로 제네릭 클래스 만들기
- 와일드 카드와 다이아몬드 지시자
- 제네릭 클래스 확장 문법
13장 JDK의 유용한 클래스들
01 자주 사용하는 Object 슈퍼 클래스 활용하기
02 날짜와 관련된 Date & Calendar 클래스 활용하기
- 날짜를 관리는 Date 클래스
- Date 클래스의 정보를 처리하는 Calendar 클래스
- Calendar 객체로 특정일 지정하기
03 문자열 관련 클래스 연습하기
- StringBulider와 StringBuffer, 그리고 StringTokenizer 클래스
04 SimpleDateFormat 클래스로 날짜 데이터 형식 변경하기
[VOL.2 목차]
셋째마당 자바 프로젝트에서 자주 사용하는 라이브러리 익히기
14장 실무 자바 개발에 앞서 꼭 알아야 할 내용
01 자바 오픈 소스 라이브러리를 활용하자
- 오픈 소스를 사용하는 이유
- 알아두면 유용한 아파치 프로젝트들
02 단위 테스트를 위한 JUnit 프레임워크는 어떻게 사용할까·
- 이클립에서 JUnit 라이브러리 추가하기
- JUnit으로 단위테스트 직접 해보기
- JUnit 프레임워크의 유용한 클래스들
03 여러 클래스 공용을 위한 클래스 패스 이해하기
- 클래스 패스 지정하는 방법
15장 디버깅의 핵심, 로깅
01 로그 프레임워크로 개발 정보를 기록하자
- 로그를 남기기 위한 일련의 과정, 로깅
- Jar 클래스 패스 설정
02 Log4j 라이브러리 분석하기
- 로그 작성을 위한 Logger 객체
03 로그 출력을 위한 Appender 객체
- 로그 메시지의 형태를 지정하는 Layout 객체
03 로깅 예제 실습하기
- log4j.properties 설정
- 로깅 시 주의할 점
16장 이메일 전송을 위한 CommonsEmail 컴포넌트
01 서버 프로그래밍 기본 지식 배우기
- 서버-클라이언트 모델
- SMTP 프로토콜
- 준비 환경 설정
02 주요 클래스와 API 사용하기
- 가장 기본이 되는 Email 클래스
- 텍스트 전송을 위한 SimpleEmail 클래스
- 메시지와 파일을 함께 전송하는 MultiPartEmail 클래스
- 첨부 파일을 위한 EmailAttachment 클래스
- HTML 형식의 HtmlEmail 클래스
- 예외 처리를 위한 EmailException 클래스
03 이메일 전송 예제 실습하기
- 이메일 전송 기능 구현
- 파일 첨부 기능 추가
17장 입출력 담당 Java Io Package
01 File 클래스 사용하기
- File 클래스와 파일 시스템이란·
- File 클래스의 관리 메소드들
- File 클래스의 권한과 관련된 메소드들
- File 클래스의 파일 정보 메소드들
- File 클래스의 경로 관련 메소드들
02 IO와 스트림 개념 이해하기
- 입출력 처리를 위한 매개체, 스트림
03 바이트 스트림으로 데이터 읽고 쓰기
- 바이트 단위 입력을 위한 InputStream 클래스
- 바이트 단위 출력을 위한 OutputStream 클래스
- Input Stream, Output Stream의 자식 클래스들
- InputStream과 OutputStream을 이용한 예제 : 파일 복사
04 문자 데이터를 읽어 들일 때 편리한 문자 스트림
- 문자 데이터를 읽기 위한 Reader 클래스
- 문자 데이터를 쓰기 위한 Writer 클래스
- Reader와 Writer의 자식 클래스들
- Reader와 Wirter을 이용한 예제 : 파일 복사
18장 PDF 핸들링을 위한 iText 라이브러리
01 iText 라이브러리로 PDF 문서 만들기
- iText 라이브러리 설정
- iText 라이브러리 주요 클래스들
02 iText 라이브러리 추가 기능 활용하기
- PDF 문서에 이미지를 추가하는 방법
- 백그라운드 이미지를 삽입하는 방법
- PDF 파일을 암호화하는 방법
03 Timer 클래스 활용하기
- Timer & TimerTask 클래스
- PDF 파일 암호화 JOB 만들기
19장 XML 핸들링
01 XML에 대한 개요
- XML이 사용되는 분야
- XML을 구성하는 요소들
- 간단한 XML 예제
02 DOM XML 파서는 언제 사용할까·
- XML 파서란·
- 문서 객체 모델 DOM
- DOM 파서 관련 주요 클래스들
- DOM 파서 관련 주요 메소드들
03 DOM XML 파서 다루기
- DOM을 구성하는 Node 관련 클래스와 메소드
- DOM Parsing 예제
- DOM 관련 XML 생성 예제
04 SAX XML 파서도 기억하자
- SAX 파서 관련 주요 클래스와 메소드
- SAX 파싱 예제
05 DOM 파서 vs SAX 파서 비교하기
20장 JSON 핸들링
01 JSON 기본 문법 익히기
- JSON 객체
- JSON 배열
02 json-simple 라이브러리 활용하기
- 빌드 패스에 추가하는 방법
- json-simple 라이브러리의 주요 클래스들
03 jSONMapper 클래스 예제 실습하기
- JSONMapper 클래스의 메소드들
- 테스트를 위한 TestValue 클래스
- TestJSONMapper 클래스
21장 Apache Http 컴포넌트
01 HTTP 프로토콜 알고 넘어가자
- HTTP 프로토콜이란·
- HTTP 프로토콜의 4단계 동작 과정
- 요청-응답 메시지와 상태 코드
02 HTTP Client 클래스를 직접 사용해보자
- HTTPClient의 특징
- HTTPClient 환경 설정
- HTTPClient 모듈의 주요 클래스
- HttpPost/HttpGet 방식으로 데이터 추가하기
03 HTTP 기반의 Open API 연동하기
- 네이버 Open API 준비 사항
- Open API 예제
22장 향상된 Java 7
01 Java 7, 무엇이 달라졌을까·
- 편리한 코딩을 위한 Project Coin
- NIO2 클래스들
부록
A API DOC에서 클래스에 대한 설명을 얻자
B 이클립스 활용 가이드