0. [Java] Index

Chapter 1 자바를 시작하기 전에

  1. 자바(Java Programming Language) / 2 1.1 자바란? / 2 1.2 자바의 역사 / 2 1.3 자바언어의 특징 / 3 1.4 JVM(Java Virtual Machine) / 4
  2. 자바개발환경 구축하기 / 6 2.1 자바 개발도구(JDK)설치하기 / 6 2.2 Java API문서 설치하기 / 7
  3. 자바로 프로그램작성하기 / 8 3.1 Hello.java / 8 3.2 자주 발생하는 에러와 해결방법 / 11 3.3 자바프로그램의 실행과정 / 12 3.4 주석(comment) / 13 3.5 이 책으로 공부하는 방법 / 14

Chapter 2 변수(Variable)

  1. 변수와 상수 / 20 1.1 변수란? / 20 1.2 변수의 선언과 초기화 / 20 1.3 변수의 명명규칙 /25
  2. 변수의 타입 / 27 2.1 기본형(primitive type) / 28 2.2 상수와 리터럴(constant & literal) / 30 2.3 형식화된 출력 - printf() / 36 2.4 화면에서 입력받기 - Scanner / 40
  3. 진법 / 42 3.1 10진법과 2진법 / 42 3.2 비트(bit)와 바이트(byte) / 43 3.3 8진법과 16진법 / 44 3.4 정수의 진법 변환 / 46 3.5 실수의 진법변환 / 48 3.6 음수의 2진 표현 - 2의 보수법 / 50
  4. 기본형(primitive type) / 55 4.1 논리형 - boolean / 55 4.2 문자형 - char / 55 4.3 정수형 - byte, short, int, long / 62 4.4 실수형 - float, double / 68
  5. 형변환 / 74 5.1. 형변환(캐스팅, casting)이란? / 74 5.2 형변환 방법 / 74 5.3 정수형 간의 형변환 / 75 5.4 실수형 간의 형변환 / 77 5.5 정수형과 실수형간의 형변환 / 80 5.6 자동 형변환 / 82

Chapter 3 연산자(Operator)

  1. 연산자(operator) / 86 1.1 연산자와 피연산자 / 86 1.2 식(式)과 대입연산자 / 86 1.3 연산자의 종류 / 87 1.4 연산자의 우선순위와 결합규칙 / 88 1.5 산술 변환(usual arithmetic conversion) / 91
  2. 단항 연산자 / 93 2.1 증감 연산자 - ++, – / 93 2.2 부호 연산자 - +, - / 96
  3. 산술 연산자 / 97 3.1 사칙 연산자 - +, -, *, / / 97 3.2 나머지 연산자 - % / 108
  4. 비교 연산자 / 109 4.1 대소비교 연산자 - 〈, 〉, 〈=, 〉= / 109 4.2 등가비교 연산자 - ==, != / 109
  5. 논리 연산자 / 114 5.1 논리 연산자 - &&, ||, ! / 114 5.2 비트 연산자 - &, |, ^, ~, 〈〈, 〉〉 / 121
  6. 그 외의 연산자 / 130 6.1 조건 연산자 - ? : / 130 6.2 대입 연산자 - =, op= / 132

Chapter 4 조건문과 반복문

  1. 조건문 - if, switch / 136 1.1 if문 / 136 1.2 if-else문 / 140 1.3 if-else if문 / 141 1.4 중첩 if문 / 144 1.5 switch문 / 146
  2. 반복문 - for, while, do-while / 156 2.1 for문 / 156 2.2 while문 / 167 2.3 do-while문 / 173 2.4 break문 / 175 2.5 continue문 / 176 2.6 이름 붙은 반복문 / 178

Chapter 5 배열(Array)

  1. 배열(array) / 182 1.1 배열(array)이란? / 182 1.2 배열의 선언과 생성 / 183 1.3 배열의 길이와 인덱스 / 184 1.4 배열의 초기화 / 189 1.5 배열의 복사 / 192 1.6 배열의 활용 / 196
  2. String배열 / 205 2.1 String배열의 선언과 생성 / 205 2.2 String배열의 초기화 / 205 2.3 char배열과 String클래스 / 208 2.4 커맨드 라인을 통해 입력받기 / 211
  3. 다차원 배열 / 214 3.1 2차원 배열의 선언과 인덱스 / 214 3.2 2차원 배열의 초기화 / 215 3.3 가변 배열 / 219 3.4 다차원 배열의 활용 / 220

Chapter 6 객체지향 프로그래밍 I

  1. 객체지향언어 / 230 1.1 객체지향언어의 역사 / 230 1.2 객체지향언어 / 230
  2. 클래스와 객체 / 231 2.1 클래스와 객체의 정의와 용도 / 231 2.2 객체와 인스턴스 / 232 2.3 객체의 구성요소 - 속성과 기능 / 233 2.4 인스턴스의 생성과 사용 / 234 2.5 객체 배열 / 241 2.6 클래스의 또 다른 정의 / 242
  3. 변수와 메서드 / 246 3.1 선언위치에 따른 변수의 종류 / 246 3.2 클래스변수와 인스턴스변수 / 247 3.3 메서드 / 249 3.4 메서드의 선언과 구현 / 252 3.5 메서드의 호출 / 254 3.6 return문 / 258 3.7 JVM의 메모리구조 / 261 3.8 기본형 매개변수와 참조형 매개변수 / 264 3.9 참조형 반환타입 / 268 3.10 재귀호출(recursive call) / 270 3.11 클래스 메서드(static메서드)와 인스턴스 메서드 / 278 3.12 클래스 멤버와 인스턴스 멤버간의 참조와 호출 / 280
  4. 오버로딩(overloading) / 283 4.1 오버로딩이란? / 283 4.2 오버로딩의 조건 / 283 4.3 오버로딩의 예 / 283 4.4 오버로딩의 장점 / 285 4.5 가변인자(varargs)와 오버로딩 / 287
  5. 생성자(constructor) / 291 5.1 생성자란? / 291 5.2 기본 생성자(default constructor) / 292 5.3 매개변수가 있는 생성자 / 294 5.4 생성자에서 다른 생성자 호출하기 - this(), this / 295 5.5 생성자를 이용한 인스턴스의 복사 / 298

  6. 변수의 초기화 / 300 6.1 변수의 초기화 / 300 6.2 명시적 초기화(explicit initialization) / 301 6.3 초기화 블럭(initialization block) / 302 6.4 멤버변수의 초기화 시기와 순서 / 304

Chapter 7 객체지향 프로그래밍 II

  1. 상속(inheritance) / 310 1.1 상속의 정의와 장점 / 310 1.2 클래스간의 관계 - 포함관계 / 316 1.3 클래스간의 관계 결정하기 / 317 1.4 단일상속(single inheritance) / 324 1.5 Object클래스 - 모든 클래스의 조상 / 325
  2. 오버라이딩(overriding) / 327 2.1 오버라이딩이란? / 327 2.2 오버라이딩의 조건 / 328 2.3 오버로딩 vs. 오버라이딩 / 329 2.4 super / 330 2.5 super() - 조상 클래스의 생성자 / 332
  3. package와 import / 336 3.1 패키지(package) / 336 3.2 패키지의 선언 / 337 3.3 import문 / 340 3.4 import문의 선언 / 340 3.5 static import문 / 342
  4. 제어자(modifier) / 344 4.1 제어자란? / 344 4.2 static - 클래스의, 공통적인 / 344 4.3 final - 마지막의, 변경될 수 없는 / 345 4.4 abstract - 추상의, 미완성의 / 347 4.5 접근 제어자(access modifier) / 348 4.6 제어자(modifier)의 조합 / 353
  5. 다형성(polymorphism) / 354 5.1 다형성이란? / 354 5.2 참조변수의 형변환 / 357 5.3 instanceof연산자 / 362 5.4 참조변수와 인스턴스의 연결 / 364 5.5 매개변수의 다형성 / 367 5.6 여러 종류의 객체를 배열로 다루기 / 370
  6. 추상클래스(abstract class) / 375 6.1 추상클래스란? / 375 6.2 추상메서드(abstract method) / 376 6.3 추상클래스의 작성 / 377
  7. 인터페이스(interface) / 381 7.1 인터페이스란? / 381 7.2 인터페이스의 작성 / 381 7.3 인터페이스의 상속 / 382 7.4 인터페이스의 구현 / 382 7.5 인터페이스를 이용한 다중상속 / 385 7.6 인터페이스를 이용한 다형성 / 387 7.7 인터페이스의 장점 / 390 7.8 인터페이스의 이해 / 397 7.9 디폴트 메서드와 static메서드 / 401
  8. 내부 클래스(inner class) 403 8.1 내부 클래스란? / 403 8.2 내부 클래스의 종류와 특징 / 404 8.3 내부 클래스의 선언 / 404 8.4 내부 클래스의 제어자와 접근성 / 405 8.5 익명 클래스(anonymous class) / 410

Chapter 8 예외처리(Exception Handling)

  1. 예외처리(exception handling) / 414 1.1 프로그램 오류 / 414 1.2 예외 클래스의 계층구조 / 415 1.3 예외처리하기 - try-catch문 / 416 1.4 try-catch문에서의 흐름 / 420 1.5 예외의 발생과 catch블럭 / 421 1.6 예외 발생시키기 / 425 1.7 메서드에 예외 선언하기 / 427 1.8 finally블럭 / 434 1.9 자동 자원 반환 - try-with-resources문 / 436 1.10 사용자정의 예외 만들기 / 439 1.11 예외 되던지기(exception re-throwing) / 442 1.12 연결된 예외(chained exception) / 444

Chapter 9 java.lang패키지와 유용한 클래스

  1. java.lang패키지 / 450 1.1 Object클래스 / 450 1.2 String클래스 / 464 1.3 StringBuffer클래스와 StringBuilder클래스 / 477 1.4 Math클래스 / 483 1.5 래퍼(wrapper) 클래스 / 490
  2. 유용한 클래스 / 496 2.1 java.util.Objects클래스 / 496 2.2 java.util.Random클래스 / 500 2.3 정규식(Regular Expression) - java.util.regex패키지 / 505 2.4 java.util.Scanner클래스 / 510 2.5 java.util.StringTokenizer클래스 / 514 2.6 java.math.BigInteger클래스 / 518 2.7 java.math.BigDecimal클래스 / 521

Chapter 10 날짜와 시간 & 형식화

  1. 날짜와 시간 / 528 1.1 Calendar와 Date / 528

  2. 형식화 클래스 / 540 2.1 DecimalFormat / 540 2.2 SimpleDateFormat / 544 2.3 ChoiceFormat / 548 2.4 MessageFormat / 549
  3. java.time패키지 / 552 3.1 java.time패키지의 핵심 클래스 / 552 3.2 LocalDate와 LocalTime / 555 3.3 Instant / 560 3.4 LocalDateTime과 ZonedDateTime / 561 3.5 TemporalAdjusters / 565 3.6 Period와 Duration / 567 3.7 파싱과 포맷 / 572

Chapter 11 컬렉션 프레임웍

  1. 컬렉션 프레임웍(Collection Framework) / 578 1.1 컬렉션 프레임웍의 핵심 인터페이스 / 578 1.2 ArrayList / 584 1.3 LinkedList / 596 1.4 Stack과 Queue / 604 1.5 Iterator, ListIterator, Enumeration / 614 1.6 Arrays / 624 1.7 Comparator와 Comparable / 628 1.8 HashSet / 631 1.9 TreeSet / 638 1.10 HashMap과 Hashtable / 644 1.11 TreeMap / 654 1.12 Properties / 658 1.13 Collections / 664 1.14 컬렉션 클래스 정리 & 요약 / 667

Chapter 12 지네릭스, 열거형, 애너테이션

  1. 지네릭스(Generics) / 670 1.1 지네릭스란? / 670 1.2 지네릭 클래스의 선언 / 670 1.3 지네릭 클래스의 객체 생성과 사용 / 674 1.4 제한된 지네릭 클래스 / 676 1.5 와일드 카드 / 678 1.6 지네릭 메서드 / 684 1.7 지네릭 타입의 형변환 / 687 1.8 지네릭 타입의 제거 / 689
  2. 열거형(enums) / 691 2.1 열거형이란? / 691 2.2 열거형의 정의와 사용 / 692 2.3 열거형에 멤버 추가하기 / 695 2.4 열거형의 이해 / 698

  3. 애너테이션(annotation) / 702 3.1 애너테이션이란? / 702 3.2 표준 애너테이션 / 703 3.3 메타 애너테이션 / 711 3.4 애너테이션 타입 정의하기 / 715

Chapter 13 쓰레드(Thread)

  1. 프로세스와 쓰레드 / 722
  2. 쓰레드의 구현과 실행 / 724
  3. start()와 run() / 728
  4. 싱글쓰레드와 멀티쓰레드 / 732
  5. 쓰레드의 우선순위 / 738
  6. 쓰레드 그룹(thread group) / 741
  7. 데몬 쓰레드(daemon thread) / 744
  8. 쓰레드의 실행제어 / 748
  9. 쓰레드의 동기화 / 767 9.1 synchronized를 이용한 동기화 / 767 9.2 wait()과 notify() / 771 9.3 Lock과 Condition을 이용한 동기화 / 779 9.4 volatile / 786 9.5 fork & join 프레임웍 / 788

Chapter 14 람다와 스트림

  1. 람다식 / 794 1.1 람다식이란? / 794 1.2 람다식 작성하기 / 795 1.3 함수형 인터페이스(Functional Interface) / 797 1.4 java.util.function패키지 / 803 1.5 Function의 합성과 Predicate의 결합 / 809 1.6 메서드 참조 / 813
  2. 스트림(stream) / 815 2.1 스트림이란? / 815 2.2 스트림 만들기 / 819 2.3 스트림의 중간연산 / 824 2.4 Optional〈T〉와 OptionalInt / 837 2.5 스트림의 최종연산 / 842 2.6 collect() / 846 2.7 Collector구현하기 / 862 2.8 스트림의 변환 / 864

Chapter 15 입출력(I/O)

  1. 자바에서의 입출력 / 868 1.1 입출력이란? / 868 1.2 스트림(stream) / 868 1.3 바이트기반 스트림 - InputStream, OutputStream / 869 1.4 보조스트림 / 871 1.5 문자기반 스트림 - Reader, Writer / 872
  2. 바이트기반 스트림 / 874 2.1 InputStream과 OutputStream / 874 2.2 ByteArrayInputStream과 ByteArrayOutputStream / 875 2.3 FileInputStream과 FileOutputStream / 879
  3. 바이트기반의 보조스트림 / 882 3.1 FilterInputStream과 FilterOutputStream / 882 3.2 BufferedInputStream과 BufferedOutputStream / 883 3.3 DataInputStream과 DataOutputStream / 886 3.4 SequenceInputStream / 892 3.5 PrintStream / 894
  4. 문자기반 스트림 / 898 4.1 Reader와 Writer / 898 4.2 FileReader와 FileWriter / 899 4.3 PipedReader와 PipedWriter / 901 4.4 StringReader와 StringWriter / 903
  5. 문자기반의 보조스트림 / 904 5.1 BufferedReader와 BufferedWriter / 904 5.2 InputStreamReader와 OutputStreamWriter / 905
  6. 표준입출력과 File / 907 6.1 표준입출력 - System.in, System.out, System.err / 907 6.2 표준입출력의 대상변경 - setOut(), setErr(), setIn() / 909 6.3 RandomAccessFile / 911 6.4 File / 915
  7. 직렬화(Serialization) / 934 7.1 직렬화란? / 934 7.2 ObjectInputStream과 ObjectOutputStream / 935 7.3 직렬화가 가능한 클래스 만들기 - Serializable, transient / 937 7.4 직렬화가능한 클래스의 버전관리 / 943

Chapter 16 네트워킹(Networking)

  1. 네트워킹(Networking) / 946 1.1 클라이언트/서버(client/sever) / 946 1.2 IP주소(IP address) / 948 1.3 InetAddress / 949 1.4 URL(Uniform Resource Location) / 951 1.5 URLConnection / 954
  2. 소켓 프로그래밍 / 959 2.1 TCP와 UDP / 959 2.2 TCP소켓 프로그래밍 / 960 2.3 UDP소켓 프로그래밍 / 978