장바구니 담기 close

장바구니에 상품을 담았습니다.

손안의 자바

손안의 자바 초보자를 위한 자바 프로그래밍의 핵심 + 알파

  • 김지훈
  • |
  • 에이콘출판
  • |
  • 2018-07-17 출간
  • |
  • 660페이지
  • |
  • 188 X 253 X 31 mm
  • |
  • ISBN 9791161751832
판매가

30,000원

즉시할인가

27,000

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

수량
+ -
총주문금액
27,000

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평

필자가 자바를 처음 접한 시기는 벤처 붐이 한창 불던 2000년 초반이었다. KDN을 그만두고 벤처에서 일하고 있었는데, Brew라는 모바일 플랫폼에서 C언어로 메모리 할당, 해제를 하면서 한 땀 한 땀 프로그램을 작성하고 있었다. 그런데 그때 후배가 자기가 만들었다며 핸드폰에서 돌아가는 자바 프로그램을 보여줬다. 후배에게 메모리 관리는 어떻게 했는지 물어봤다. 그런데 그 후배는 눈을 깜빡이며 “메모리 관리? 그게 뭐예요?”하는 것이 아닌가. 그렇다. 자바는 메모리 관리가 필요 없었다.
처음 자바를 접했을 때 받은 인상은 한문만 사용하던 양반이 한글을 접했을 때의 느낌과 비슷했다.

그 당시에는 C는 전문가들이 사용하는 언어, 자바는 IT 노동자(?)들이 사용하는 언어 정도로 치부했다. 그러나 세월이 흘러 이제는 자바가 대세를 차지하고 있다. 변화가 느리다는 금융권에서 조차도 이제는 자바로 계정 시스템을 만드는 것이 흔한 일이 됐다. 필자 역시 대부분의 프로젝트를 자바로 수행하고 있다. 직장생활을 하며 자바를 이용해 대부분의 프로그램을 작성해왔지만, 책을 쓰는 것은 쉽지 않은 일이었다. 실무 경험이 많기는 하지만 그걸 전달하는 것은 어려운 작업이었다. 왜 이런 말도 있지 않은가. “그냥 내가 짜고 말지.” 하지만 작업을 끝내고 나니 단순히 지식을 글로 정리한 것뿐 아니라 스스로 쓰면서 배운 부분이 있었다는 생각이 든다.

처음 자바를 접한 이후 자바의 버전도 많이 높아졌다. 지금 자바를 보고 있자니, 어느 날 부쩍 다 커버린 자녀를 보는 느낌이랄까? 스레드 프로그램을 작성할 때 블로킹 큐까지 한 자 한 자 코딩을 하던 시절이 있었는데 이제는 자바가 제공하는 기본 기능을 사용하면 단 몇 줄로 끝낼 수 있게 됐다. 하긴 맨 처음 안드로이드 책을 쓸 때는 놀아주지 않는다고 칭얼대던 아이가 이제는 마감을 지키라고 닦달하는 청소년으로 컸으니 자바도 그럴 만하다.
이 책의 목표는 가능한 적은 분량 안에 실제 프로젝트에서 사용되고 있는 자바 문법과 API 그리고 프로그래밍 가이드를 담는 것이다. 자바 책이 날로 두꺼워지고 있는 요즘 이런 생각을 한 이유는 필자의 직업 때문이다. 필자는 LG CNS와 KT ds에서 소프트웨어 아키텍트 역할을 수행한 후, 현재는 TI 감리 법인에 근무하고 있다.

정보시스템 감리 직업의 특성상 1년이면 10~20여 개의 프로젝트를 점검한다. 필자는 최근 4년 동안 약 70여 개가 넘는 프로젝트를 감리했으며, 점검한 시스템의 소스는 약 100여 개에 달한다. 그러다 보니 자바 프로그래밍 요소 중 실제로 사용되고 있는 것들이 무엇인지 자연스럽게 경험하게 됐다. 그 경험을 바탕으로 자바 프로그래밍 중 실무에 사용되는 요소들만 책에 담을 수 있었다. 이 책은 자바 8까지의 내용을 주로 다루며, 그 이후에 버전에 대해서는 많이 다루지 않는다. 자바 입문자 대상으로는 불필요하다고 판단했기 때문이다. 그러나 자바 9를 일부 사용하기 때문에 개발 환경은 자바 9를 사용한다.

★ 이 책에서 다루는 내용 ★

- 초보자를 위한 자바 문법 핵심 + 알파
- 실제 프로젝트에서 사용하는 문법 위주의 자바 프로그래밍
- 좋은 프로그램을 위한 기본적인 가이드
- 개발자들이 실수하기 쉬운 개념
- 정부가 주관하는 수십 개의 프로젝트에서 사용하지 않는 문법 제외


★ 이 책의 대상 독자 ★

- 프로그래밍 경험이 없는 자바 입문자
- 개발 관련 경험이 있으면서 자바를 시작하는 개발자
- 기존에 작성된 코드를 생각 없이 사용하는 개발자
 

목차


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 환경 소개

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.