Top

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

  • 지은이김지훈, 이현우
  • ISBN : 9791161751832
  • 30,000원
  • 2018년 07월 17일 펴냄
  • 페이퍼백 | 660쪽 | 188*235mm
  • 시리즈 : 프로그래밍 언어

책 소개

요약

정보시스템 감리를 통해 70여 개 이상의 프로젝트 소스코드를 검사했다. 이 소스코드 검사를 통해 실제 프로젝트에서 사용하는 문법이 무엇이며, 개발자들이 자주 실수하는 것이 무엇인지 알게 됐다. 이 책은 이러한 경험을 바탕으로 작성했다. 초보 개발자들에게 실제 프로젝트에서 사용하는 핵심 문법 위주로 자바를 소개하며, 최신 버전의 자바의 기능과 관련해 앞으로 사용될 것 같다고 판단되는 장치들을 포함시켰다. 많은 자바 입문자가 이 책을 읽고 효율적인 길을 걸을 수 있기를 바란다.

이 책에서 다루는 내용

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

이 책의 대상 독자

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

저자/역자 소개

지은이의 말

필자가 자바를 처음 접한 시기는 벤처 붐이 한창 불던 2000년 초반이었다. KDN을 그만두고 벤처에서 일하고 있었는데, Brew라는 모바일 플랫폼에서 C언어로 메모리 할당, 해제를 하면서 한 땀 한 땀 프로그램을 작성하고 있었다. 그런데 그때 후배가 자기가 만들었다며 핸드폰에서 돌아가는 자바 프로그램을 보여줬다. 후배에게 메모리 관리는 어떻게 했는지 물어봤다. 그런데 그 후배는 눈을 깜빡이며 “메모리 관리? 그게 뭐예요?”하는 것이 아닌가. 그렇다. 자바는 메모리 관리가 필요 없었다.
처음 자바를 접했을 때 받은 인상은 한문만 사용하던 양반이 한글을 접했을 때의 느낌과 비슷했다. 그 당시에는 C는 전문가들이 사용하는 언어, 자바는 IT 노동자(?)들이 사용하는 언어 정도로 치부했다. 그러나 세월이 흘러 이제는 자바가 대세를 차지하고 있다. 변화가 느리다는 금융권에서 조차도 이제는 자바로 계정 시스템을 만드는 것이 흔한 일이 됐다. 필자 역시 대부분의 프로젝트를 자바로 수행하고 있다.
직장생활을 하며 자바를 이용해 대부분의 프로그램을 작성해왔지만, 책을 쓰는 것은 쉽지 않은 일이었다. 실무 경험이 많기는 하지만 그걸 전달하는 것은 어려운 작업이었다. 왜 이런 말도 있지 않은가. “그냥 내가 짜고 말지.” 하지만 작업을 끝내고 나니 단순히 지식을 글로 정리한 것뿐 아니라 스스로 쓰면서 배운 부분이 있었다는 생각이 든다.
처음 자바를 접한 이후 자바의 버전도 많이 높아졌다. 지금 자바를 보고 있자니, 어느 날 부쩍 다 커버린 자녀를 보는 느낌이랄까? 스레드 프로그램을 작성할 때 블로킹 큐까지 한 자 한 자 코딩을 하던 시절이 있었는데 이제는 자바가 제공하는 기본 기능을 사용하면 단 몇 줄로 끝낼 수 있게 됐다. 하긴 맨 처음 안드로이드 책을 쓸 때는 놀아주지 않는다고 칭얼대던 아이가 이제는 마감을 지키라고 닦달하는 청소년으로 컸으니 자바도 그럴 만하다.
이 책의 목표는 가능한 적은 분량 안에 실제 프로젝트에서 사용되고 있는 자바 문법과 API 그리고 프로그래밍 가이드를 담는 것이다. 자바 책이 날로 두꺼워지고 있는 요즘 이런 생각을 한 이유는 필자의 직업 때문이다. 필자는 LG CNS와 KT ds에서 소프트웨어 아키텍트 역할을 수행한 후, 현재는 TI 감리 법인에 근무하고 있다.
정보시스템 감리 직업의 특성상 1년이면 10~20여 개의 프로젝트를 점검한다. 필자는 최근 4년 동안 약 70여 개가 넘는 프로젝트를 감리했으며, 점검한 시스템의 소스는 약 100여 개에 달한다. 그러다 보니 자바 프로그래밍 요소 중 실제로 사용되고 있는 것들이 무엇인지 자연스럽게 경험하게 됐다. 그 경험을 바탕으로 자바 프로그래밍 중 실무에 사용되는 요소들만 책에 담을 수 있었다.
이 책은 자바 8까지의 내용을 주로 다루며, 그 이후에 버전에 대해서는 많이 다루지 않는다. 자바 입문자 대상으로는 불필요하다고 판단했기 때문이다. 그러나 자바 9를 일부 사용하기 때문에 개발 환경은 자바 9를 사용한다. /저자 김 지 훈 드림

직장생활을 하면서 초보자가 쉽게 접할 수 있는 실무경험이 담긴 자바 책을 집필하겠다는 욕심이 있었지만 책을 집필하기가 쉽지 않았던 것 같다. 이 책이 처음 개발을 하는 초보자들을 위해 집필됐음을 알아줬으면 좋겠다. 고민하고 집필한 내용들이 독자들에게 전달돼 실무 현장에서 도움이 될 것이라고 생각한다.
자바는 매년 변화해왔고 느리지만 성장해왔다. 필자가 자바를 처음 접했을 때와 이 책을 읽는 독자들이 접하는 현재의 시점과는 많은 차이가 있다. 예전에는 무엇인가를 좀 더 고민하고 코드를 길게 작성하던 일련의 일들이 이젠 간단한 한 줄 정도의 코딩으로도 마무리가 된다. 예전보다 쉬워졌다고 하지만 그래도 여전히 시작하는 이들에게는 어려움이 있을 것이다. 필자도 시작할 때는 벽에 부딪힌 듯 막막했고, 도와주는 사람도 없이 개발 서적을 가지고 학습을 했다. 그때 필자와 같은 사람들이 이 책의 독자층이라고 생각하고 집필했다. /저자 이 현 우 드림

지은이 소개

김지훈

동국대학교 컴퓨터공학과를 나왔으며, 홍익대학교 대학원 컴퓨터공학과에서 시스템 프로그래밍을 전공해 석사 학위를 받았다. LG CNS에서 SW 아키텍트를 수행했으며, KT ds에서 연구원을 지냈고 현재는 정보기술감리원에서 감리사로 근무 중이다. 안드로이드, HTML5, 빅데이터, 보안 분야에서 저술과 번역 작업을 수행했으며, 정보시스템 감리에서 주로 수행하는 분야는 시스템 구조 및 보안 분야이다.

이현우

대한민국 공군 장교로 방공전산서버 운영을 하면서 IT 관련 경력을 시작했다. 이후 LG CNS에서 차세대 응용개발 프로그램을 수행했으며, 모바일 개발에 관심을 가지고 KT ds 연구소의 모바일 플랫폼 개발을 수행했다. 이후 정보시스템감리사 자격증을 취득한 후 한국 공공기관의 정보시스템 감리업무를 수행하고 있으며, IBK기업은행, 삼성생명, 산업은행, 한국전력 등의 많은 공공기관의 감리 업무를 수행했다. IT 강의를 하는 것을 좋아하며 시큐어코딩 및 데이터베이스, 자바프로그램에 대한 강의를 한국전력 및 한국소프트웨어 기술진흥협회(KOSTA), 한국ICT융합협동조합 등에서 수행했다. 최근 화제가 되고 있는 워라벨을 중시하며, 매번 어제보다 나은 오늘이 되기 위해서 노력하지만 매번 부족함을 느끼고 있는 개발자이다.

목차

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

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.202]

[p.243]
Function alInterface라고 한다.
->
Functionalinterface라고 한다.

[p.252 : 3행]
OuterClasd에서
->
OuterClass에서

[p.265 : 도표]
Checked Exception과 Unchecked Exception 위치 변경