이미 소장하고 있다면 판매해 보세요.
|
1부. 자바 기본
1장. 자바를 시작하며 __자바란? __개발 환경 구축하기 __자바에서의 명명 규칙 2장. 변수와 상수 __변수의 이해와 활용 __변수의 타입 __논리형 - boolean __문자형 - char __정수형 - byte, short, int, long __실수형 - float, double __형변환 __상수 3장. 연산자 __연산자 종류와 우선순위 __단항 연산자 ____논리 부정 연산자 ! ____부호 연산자 +, - ____비트 전환 연산자 ~ ____증감 연산자 + + , - - __산술 연산자 ____나머지 연산자 % ____사칙 연산자 +, -, ?, / ____시프트 연산자 <<, >>, >>> __비교 연산자 ____대소비교 연산자 <, >, <=, >= ____등가비교 연산자 ==, != __논리 연산자 ____논리 연산자 &&, || ____비트 연산자 &, |, ^ 4장. 실행흐름의 컨트롤 __조건문 if문, switch문 ____if문 ____switch문 __반복문 for, while, do~while ____do~while문 ____for문 ____while문 __break와 continue문 ____break문 ____continue문 __변수의 범위 5장. 배열 __배열(array)의 필요성 __배열의 선언과 생성 그리고 초기화 __배열의 사용 __배열의 복사 __다차원 배열 __가변 배열 __배열을 벗어난 인덱스 __System.arraycopy와 매뉴얼 복사 중 누가 빠른가? __Arrays - 배열을 위한 유틸 클래스 6장. 객체 지향 프로그래밍의 개념 __객체 지향 프로그래밍이란? __객체 __객체 간 상호작용 __캡슐화 __객체와 클래스 그리고 객체 참조자 7장. 클래스, 변수,메소드 __자바 10에서의 지역 변수 타입 추론 __클래스 선언 __클래스 사용 __클래스 구성 요소 __필드(멤버 변수) __필드 선언 __필드 사용 __메소드 ____Void __메소드 오버로딩 __생성자 8장. 패키지와 임포트 __패키지 __임포트(import) 9장. 상속과 오버라이딩 그리고 다형성 __상속의 개념 __상속 __오버라이딩 __다형성 __상속과 생성자 __상속관계에서의 메소드 호출 순서 10장. 제어자 __접근 제어자 ____Private ____Protected ____Public __프로그래밍 가이드 - 접근 제어자의 엄격한 적용 __프로그래밍 가이드 - 멤버변수에 대한 직접 접근을 막아라 __static 제어자 __정적 메소드의 재정의 불가 __final 제어자 11장. 추상 클래스와 인터페이스 __추상 클래스 __인터페이스 __인터페이스를 사용한 다중상속 __자바 8 이후의 인터페이스 변화 ____인터페이스 private 메소드와 인터페이스 private 정적 메소드 ____인터페이스 디폴트(default) 메소드 ____인터페이스 정적(static) 메소드 __자바 8 이후의 인터페이스를 사용한 다중상속 __자바8 이후의 ::를 사용한 메소드 참조 그리고 함수형 인터페이스 ____빌트인 함수형 인터페이스 ____함수형 인터페이스 12장. 중첩 클래스 __중첩 클래스 사용 이유 __중첩 클래스 분류 __내부 클래스 __정적 내부 클래스 __메소드 로컬 내부 클래스 __익명 내부 클래스 __유사 중첩 클래스 13장. 오류 처리 __오류 처리 소개 __오류 클래스 구조 및 기본 동작 방식 __예외 캐치 처리 순서 __비즈니스 예외 __실 프로젝트에서 많이 사용되는 예외 처리 방안 __finally 문장 __try-with-resources 문장 __인터페이스나 추상 클래스에서의 예외 쓰로우 선언 14장. 자주 사용하는 자바 기본 API __Object 클래스 ____clone() ____toEquals() ____toString() ____프로그래밍 가이드 - Object의 toString()을 재정의하라 __String 클래스 __Math 클래스 __래퍼 클래스 __Random 클래스 __java.util.regex 패키지 __BigInteger __BigDecimal __Calendar와 Date 그리고 DateFormat __자바 8부터 지원하는 새로운 날짜 지원 API ____날짜 및 시간 객체에서 정보 조회하기 ____날짜 및 시간 알아내기 ____날짜와 시간 더하거나 빼기 __날짜와 시간 변경하기 __특정 날짜 계산하기 ____Duration을 사용한 초, 나노초 기반 차이 ____Period를 사용한 날짜 기반 차이 ____날짜 및 시간 비교 ____날짜 및 시간 차이 계산 ____날짜 포맷팅 __ZonedDateTime으로 세계시 다루기 15장. 제네릭 __들어가면서 __제네릭의 필요성 __제네릭을 이용한 첫번째 클래스 작성하기 __제네릭 동작 방식 __제네릭 기본 문법 ____구체화 타입의 자식 타입 사용 가능 ____정적 요소에 제네릭 타입 사용 불가 ____제네릭 클래스의 new 불가 ____제네릭 타입 구체화 시 배열 불가 ____제네릭 타입에 제약 조건 두기 __제네릭 인터페이스 __제네릭 메소드 __제네릭 와일드카드 __좀 더 복잡한 제네릭 메소드와 와일드카드의 예 ____파라미터에는 와일드카드가 없는 경우 ____파라미터에 와일드카드가 두개 있는 경우 ____파라미터에 와일드카드가 한개 있는 경우 __다이아몬드 연산자 16장. 컬렉션 프레임워크 __HashSet __ArrayList __Vector __HashMap과 Hashtable __Iterator __리스트 대 배열 __Comparator를 사용한 목록 정렬하기 __목록에 요소 추가 및 삭제하기 ____foreach문에서의 추가 및 삭제 시 예외발생 ____Iterator를 사용한 요소 삭제 ____인덱스를 사용한 for문에서의 삭제 시 정합성 문제 ____인덱스를 사용한 요소 삭제 및 추가 17장. 열거형(Enum 타입) __들어가면서 __처음 만나는 열거형 __열거형에 데이터 연결하기 __여러 형태의 열거형 정의 방법 __열거형에 관한 유용한 메소드 18장. 어노테이션 __들어가면서 __어노테이션 맛보기 __JDK가 제공하는 표준 어노테이션 __커스텀 어노테이션 작성을 위한 기초 지식 ____@Documented ____@Inherited ____@Repeatable ____@Retention ____@Target __커스텀 어노테이션 작성하기 __프로그래밍 가이드 - 네이밍 규칙보다는 어노테이션을 사용해 식별하라 19장. 람다식 __들어가면서 __람다식 개념 __람다식 활용 예 __함수형 인터페이스 ____람다식을 조합하기 위한 빌트인 함수형 인터페이스의 장치 ____람다 캡처링 20장. 자바 8의 스트림 __들어가면서 ____스트림을 왜 사용하는가? __스트림 동작 방식 ____Stream의 인스턴스 메소드 collect() ____Stream의 인스턴스 메소드 filter() ____Stream의 인스턴스 메소드 map() ____Stream의 인스턴스 메소드 sorted() __스트림 예제 분석하기 __스트림 좀더 알아보기 __다양한 스트림 메소드 ____Collectors.groupingBy() 메소드 ____Finding과 Matching 메소드 ____foreach 메소드 ____Stream의 mapToInt(), mapToLong(), mapToDouble() 메소드 ____Stream의 Reduce() 메소드 ____병렬처리를 위한 parallelStream ____복합객체의 스트림을 세부 객체의 스트림으로 분해하는 flatMap() 메소드 ____중복 요소를 제거하는 메소드 - distinct() ____최대 요소의 개수를 제한하는 메소드 - limit() ____특정 개수를 건너띄는 메소드 - skip() ____필터 기능을 제공하는 메소드 - filter(), distinct(), limit(), skip() 21장. 스레드 __들어가면서 __스레드란? __동시성와 병렬성 __첫 번째 스레드 프로그램 __다양한 스레드 생성 방법 __스레드 세이프 __동기화 메소드 및 동기화 블록 __멀티스레드 프로그래밍의 일반적인 패턴 - 스레드 풀 __서버(Was)의 스레드 프로그래밍 모델 __스레드 로컬 __결과 값이 있는 동시 수행 __Fork/Join 프레임워크의 필요성 __ForkJoin을 사용한 동시 처리 22장. I/O 스트림 및 파일 __들어가면서 __I/O 스트림 개념 __다양한 I/O 스트림 __FileInputStream __FileOutputStream __ByteArrayInputStream /ByteArrayOutputStream __버퍼링 개념 __BufferedInputStream/BufferedOutputStream __파일 다루기 ____File 생성자 ____I/O 스트림 등에서 파일이름 문자열 대신 File 사용하기 ____기존 파일에 스트링 덧붙이기 ____디렉터리 생성하기 ____마지막 수정 날짜 변경하기 ____마지막으로 수정된 날짜 구하기 ____이름 변경하기 ____파일/디렉터리 존재 여부 확인 ____파일 사이즈 구하기 ____파일 삭제하기 ____파일 생성하기 23장. 네트워크 프로그래밍 __들어가면서 __네트워크 환경 이해 ____MAC ____라우터 ____방화벽 ____스위치 __도메인 __TCP/IP 4 계층 __소켓 서버 기본 구조 이해하기 __소켓 클라이언트 프로그램 기본 구조 이해하기 __개선된 소켓 서버 프로그램 __UDP 소개 및 예제 24장. Java NIO __들어가면서 __NIO 이유 __채널과 버퍼 그리고 셀렉터 개념 알아보기 __버퍼 좀더 알아보기 ____버퍼 생성 ____버퍼 위치 속성 __채널과 버퍼 사용 패턴 __NIO 소켓 서버 프로그램 __IO vs NIO 선택 2부. 자바 확장 1장. 생성자 관련 __들어가면서 __프로그래밍 가이드 - 생성자 대신 정적 팩토리 메소드 사용을 검토하라 __프로그래밍 가이드 - 생성자 대신 빌더 사용을 검토하라 __프로그래밍 가이드 - 유틸리티 클래스 생성자를 private로 하라 2장. 가비지 컬렉션 __들어가면서 __프로그래밍 가이드 - 쓸모없는 객체참조를 제거하라 __프로그래밍 가이드 - 종결자를 중요 작업에 사용하지 않아야 한다 3장. 객체 복사하기 __들어가면서 __클론을 이용한 복사 ____복사 생성자나 복사 정적 팩토리 메소드 사용한 복사방법을 고려하라 4장. 클래스 설계 가이드 __들어가면서 __프로그래밍 가이드 - 가능한 불변 클래스로 설계하라 __프로그래밍 가이드 - 상속보다는 컴포지션을 사용하라 5장. 그 밖의 기타 사항 __클래스패스를 고려한 클래스 실행 __java로 클래스 실행 시 인수 전달하기 __라이브러리란? __Maven 환경 소개 |
|
필자가 자바를 처음 접한 시기는 벤처 붐이 한창 불던 2000년 초반이었다. KDN을 그만두고 벤처에서 일하고 있었는데, Brew라는 모바일 플랫폼에서 C언어로 메모리 할당, 해제를 하면서 한 땀 한 땀 프로그램을 작성하고 있었다. 그런데 그때 후배가 자기가 만들었다며 핸드폰에서 돌아가는 자바 프로그램을 보여줬다. 후배에게 메모리 관리는 어떻게 했는지 물어봤다. 그런데 그 후배는 눈을 깜빡이며 “메모리 관리? 그게 뭐예요?”하는 것이 아닌가. 그렇다. 자바는 메모리 관리가 필요 없었다.
처음 자바를 접했을 때 받은 인상은 한문만 사용하던 양반이 한글을 접했을 때의 느낌과 비슷했다. 그 당시에는 C는 전문가들이 사용하는 언어, 자바는 IT 노동자(?)들이 사용하는 언어 정도로 치부했다. 그러나 세월이 흘러 이제는 자바가 대세를 차지하고 있다. 변화가 느리다는 금융권에서 조차도 이제는 자바로 계정 시스템을 만드는 것이 흔한 일이 됐다. 필자 역시 대부분의 프로젝트를 자바로 수행하고 있다. 직장생활을 하며 자바를 이용해 대부분의 프로그램을 작성해왔지만, 책을 쓰는 것은 쉽지 않은 일이었다. 실무 경험이 많기는 하지만 그걸 전달하는 것은 어려운 작업이었다. 왜 이런 말도 있지 않은가. “그냥 내가 짜고 말지.” 하지만 작업을 끝내고 나니 단순히 지식을 글로 정리한 것뿐 아니라 스스로 쓰면서 배운 부분이 있었다는 생각이 든다. 처음 자바를 접한 이후 자바의 버전도 많이 높아졌다. 지금 자바를 보고 있자니, 어느 날 부쩍 다 커버린 자녀를 보는 느낌이랄까? 스레드 프로그램을 작성할 때 블로킹 큐까지 한 자 한 자 코딩을 하던 시절이 있었는데 이제는 자바가 제공하는 기본 기능을 사용하면 단 몇 줄로 끝낼 수 있게 됐다. 하긴 맨 처음 안드로이드 책을 쓸 때는 놀아주지 않는다고 칭얼대던 아이가 이제는 마감을 지키라고 닦달하는 청소년으로 컸으니 자바도 그럴 만하다. 이 책의 목표는 가능한 적은 분량 안에 실제 프로젝트에서 사용되고 있는 자바 문법과 API 그리고 프로그래밍 가이드를 담는 것이다. 자바 책이 날로 두꺼워지고 있는 요즘 이런 생각을 한 이유는 필자의 직업 때문이다. 필자는 LG CNS와 KT ds에서 소프트웨어 아키텍트 역할을 수행한 후, 현재는 TI 감리 법인에 근무하고 있다. 정보시스템 감리 직업의 특성상 1년이면 10~20여 개의 프로젝트를 점검한다. 필자는 최근 4년 동안 약 70여 개가 넘는 프로젝트를 감리했으며, 점검한 시스템의 소스는 약 100여 개에 달한다. 그러다 보니 자바 프로그래밍 요소 중 실제로 사용되고 있는 것들이 무엇인지 자연스럽게 경험하게 됐다. 그 경험을 바탕으로 자바 프로그래밍 중 실무에 사용되는 요소들만 책에 담을 수 있었다. 이 책은 자바 8까지의 내용을 주로 다루며, 그 이후에 버전에 대해서는 많이 다루지 않는다. 자바 입문자 대상으로는 불필요하다고 판단했기 때문이다. 그러나 자바 9를 일부 사용하기 때문에 개발 환경은 자바 9를 사용한다. ★ 이 책에서 다루는 내용 ★ - 초보자를 위한 자바 문법 핵심 + 알파 - 실제 프로젝트에서 사용하는 문법 위주의 자바 프로그래밍 - 좋은 프로그램을 위한 기본적인 가이드 - 개발자들이 실수하기 쉬운 개념 - 정부가 주관하는 수십 개의 프로젝트에서 사용하지 않는 문법 제외 ★ 이 책의 대상 독자 ★ - 프로그래밍 경험이 없는 자바 입문자 - 개발 관련 경험이 있으면서 자바를 시작하는 개발자 - 기존에 작성된 코드를 생각 없이 사용하는 개발자 |