책 소개
요약
정보시스템 감리를 통해 70여 개 이상의 프로젝트 소스코드를 검사했다. 이 소스코드 검사를 통해 실제 프로젝트에서 사용하는 문법이 무엇이며, 개발자들이 자주 실수하는 것이 무엇인지 알게 됐다. 이 책은 이러한 경험을 바탕으로 작성했다. 초보 개발자들에게 실제 프로젝트에서 사용하는 핵심 문법 위주로 자바를 소개하며, 최신 버전의 자바의 기능과 관련해 앞으로 사용될 것 같다고 판단되는 장치들을 포함시켰다. 많은 자바 입문자가 이 책을 읽고 효율적인 길을 걸을 수 있기를 바란다.
이 책에서 다루는 내용
█ 초보자를 위한 자바 문법 핵심 + 알파
█ 실제 프로젝트에서 사용하는 문법 위주의 자바 프로그래밍
█ 좋은 프로그램을 위한 기본적인 가이드
█ 개발자들이 실수하기 쉬운 개념
█ 정부가 주관하는 수십 개의 프로젝트에서 사용하지 않는 문법 제외
이 책의 대상 독자
█ 프로그래밍 경험이 없는 자바 입문자
█ 개발 관련 경험이 있으면서 자바를 시작하는 개발자
█ 기존에 작성된 코드를 생각 없이 사용하는 개발자
목차
목차
- 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문
- 변수의 범위
- 조건문 if문, switch문
- 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으로 세계시 다루기
- Object 클래스
- 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.202]
[p.243]
Function alInterface라고 한다.
->
Functionalinterface라고 한다.
[p.252 : 3행]
OuterClasd에서
->
OuterClass에서
[p.265 : 도표]
Checked Exception과 Unchecked Exception 위치 변경