장바구니 담기 close

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

자바의 정석 (제4판)

자바의 정석 (제4판)

  • 남궁성
  • |
  • 도우출판
  • |
  • 2025-06-30 출간
  • |
  • 1118페이지
  • |
  • 188 X 257 X 49mm / 2253g
  • |
  • ISBN 9788994492001
판매가

40,000원

즉시할인가

36,000

배송비

무료배송

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

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

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

출판사서평

자바 프로그래머로써 반드시 알아야하는 것을 모두 담은책

저자의 오랜 실무경험과 강의 그리고 20년 넘게 온라인 카페(네이버 카페)를 운영하면서 강의한 내용을 책으로 엮은 것이기 때문에 자바를 처음 배우는 회원들의 의견과 궁금한 점들을 빠짐없이 담고 있다. 그래서 자바를 시작하는 사람들의 입장에서 쓴 책이라 할 수 있다.

자바를 소개하는데 그치지 않고 프로그래머로써 꼭 알아야하는 내용들을 체계적으로 정리하였으며 200페이지에 달하는 지면을 객체지향개념에 할애함으로써 이 책 한 권이면 객체지향개념을 완전히 이해할 수 있도록 원리중심으로 설명하고 있다.

뿐만 아니라 자바의 최신 핵심 기능인 가상 쓰레드와 모듈을 상세히 소개하고 있으며, 그 밖에 자바의 최신 LTS 버젼(2025년 2월 기준)인 Java 21의 새로운 기능들을 자세히 설명하고 있다.

그 밖에도 다른 서적들이 소홀히 다루는 지네릭스(generics), 애너테이션(annotation), 쓰레드(thread)와 같은 부분도 기초부터 응용까지 상세히 다룰 수 있다.

저자가 직접 인터넷 카페를 통해 동영상 강좌를 지속적으로 업데이트하여 제공하고 질문게시판을 운영하기 때문에 독자들이 혼자서도 충분히 학습할 수 있도록 다방면으로 배려하고 있다.

이처럼 철저하게 독자의 입장에서 생각하고 독자를 배려하는 마음과 노력이 느껴지는 책이다.

그 외에도 3판에서 부족했던 설명과 그림, 예제들을 보충하고 오타를 찾아보기 힘들정도로 정성들여 점검하였다.

- Java의 정석 3판의 부족한 부분(그림, 예제, 설명, 오타)을 개선하였습니다.
- 각 장(chapter)마다 연습문제를 추가하였습니다.
- 동영상 강좌를 무료로 제공합니다.
- 동영상강의에 사용된 발표자료(ppt) 및 학습 자료를 깃헙에 무료로 제공합니다.
- 문답게시판을 통해 책관련 질문을 상세히 답변해드립니다.

목차

ch1 자바를 시작하기 전에
1. 자바(Java programming language) 2
1.1 자바란? 2
1.2 자바의 역사 3
1.3 자바언어의 특징 6
1.4 JVM(Java Virtual Machine) 8

2. 자바개발환경 구축하기 10
2.1 자바 개발도구(JDK)설치하기 10
2.2 인텔리제이(Intellij IDEA) 설치하기 20

3. 자바로 프로그램작성하기 28
3.1 Hello.java 28
3.2 자주 발생하는 에러와 해결방법 31
3.3 자바프로그램의 실행과정 32
3.4 주석(comment) 33
3.5 이 책으로 공부하는 방법 34

ch2 변수(variable)
1. 변수(variable) 40
1.1 변수(variable)란? 40
1.2 변수의 선언과 초기화 40
1.3 변수의 명명규칙 45

2. 변수의 타입 47
2.1 기본형(primitive type) 48
2.2 상수와 리터럴(constant & literal) 50
2.3 형식화된 출력 - printf() 58
2.4 화면에서 입력받기 - Scanner 62

3. 진법 64
3.1 10진법과 2진법 64
3.2 비트(bit)와 바이트(byte) 65
3.3 8진법과 16진법 66
3.4 정수의 진법 변환 68
3.5 실수의 진법변환 70
3.6 음수의 2진 표현 - 2의 보수법 72

4. 기본형(primitive type) 76
4.1 논리형 - boolean 76
4.2 문자형 - char 76
4.3 정수형 - byte, short, int, long 83
4.4 실수형 - float, double 89

5. 형변환 95
5.1. 형변환(캐스팅, casting)이란? 95
5.2 형변환 방법 95
5.3 정수형간의 형변환 96
5.4 실수형 간의 형변환 98
5.5 정수형과 실수형 간의 형변환 101
5.6 자동 형변환 103

ch3 연산자(operator)
1. 연산자(operator) 108
1.1 연산자와 피연산자 108
1.2 식(式)과 대입 연산자 108
1.3 연산자의 종류 108
1.4 연산자의 우선순위와 결합규칙 110
1.5 산술 변환(usual arithmetic conversion) 113

2. 단항 연산자 115
2.1 증감 연산자 ++ -- 115
2.2 부호 연산자 + - 118

3. 산술 연산자 119
3.1 사칙 연산자 + - * / 119
3.2 나머지 연산자 % 130

4. 비교 연산자 131
4.1 대소비교 연산자 〈 〉 〈= 〉= 131
4.2 등가비교 연산자 == != 131

5. 논리 연산자 136
5.1 논리 연산자 - &&, ||, ! 136
5.2 비트 연산자 & | ^ ~ 〈〈 〉〉 143

6. 그 외의 연산자 152
6.1 조건 연산자 ? : 152
6.2 대입 연산자 = op= 154

ch4 조건문과 반복문
1. 조건문 - if, switch 158
1.1 if문 158
1.2 if-else문 162
1.3 if-else if문 163
1.4 중첩 if문 166
1.5 switch문 168

2. 반복문 - for, while, do-while 180
2.1 for문 180
2.2 while문 191
2.3 do-while문 197
2.4 break문 199
2.5 continue문 200
2.6 이름 붙은 반복문 202

ch5 배열(array)
1. 배열(array) 206
1.1 배열(array)이란? 206
1.2 배열의 선언과 생성 206
1.3 배열의 길이와 인덱스 208
1.4 배열의 초기화 213
1.5 배열의 복사 216
1.6 배열의 활용 220

2. String배열 230
2.1 String배열의 선언과 생성 230
2.2 String배열의 초기화 230
2.3 char배열과 String클래스 233
2.4 커맨드 라인을 통해 입력받기 236

3. 다차원 배열 238
3.1 2차원 배열의 선언과 인덱스 238
3.2 2차원 배열의 초기화 238
3.3 가변 배열 243
3.4 다차원 배열의 활용 244

ch6 객체지향 프로그래밍 I
1. 객체지향언어 254
1.1 객체지향 언어의 역사 254
1.2 객체지향언어 254

2. 클래스와 객체 255
2.1 클래스와 객체의 정의와 용도 255
2.2 객체와 인스턴스 256
2.3 객체의 구성요소 - 속성과 기능 257
2.4 인스턴스의 생성과 사용 258
2.5 객체 배열 264
2.6 클래스의 또 다른 정의 266

3. 변수와 메서드 270
3.1 선언위치에 따른 변수의 종류 270
3.2 클래스 변수와 인스턴스 변수 271
3.3 메서드 273
3.4 메서드의 선언과 구현 276
3.5 메서드의 호출 278
3.6 return문 282
3.7 JVM의 메모리 구조 285
3.8 기본형 매개변수와 참조형 매개변수 288
3.9 참조형 반환타입 292
3.10 재귀 호출(recursive call) 294
3.11 클래스 메서드와 인스턴스 메서드 301
3.12 클래스 멤버와 인스턴스 멤버 간의 참조와 호출 304

4. 오버로딩(overloading) 307
4.1 오버로딩이란? 307
4.2 오버로딩의 조건 307
4.3 오버로딩의 예 307
4.4 오버로딩의 장점 309
4.5 가변인자(varargs)와 오버로딩 311

5. 생성자(Constructor) 315
5.1 생성자란? 315
5.2 기본 생성자(default constructor) 316
5.3 매개변수가 있는 생성자 318
5.4 생성자에서 다른 생성자 호출하기 - this(), this 319
5.5 생성자를 이용한 인스턴스의 복사 322

6 변수의 초기화 324
6.1 변수의 초기화 324
6.2 명시적 초기화(explicit initialization) 325
6.3 초기화 블럭(initialization block) 326
6.4 멤버변수의 초기화 시기와 순서 328

ch7 객체지향 프로그래밍 II
1. 상속(inheritance) 334
1.1 상속의 정의와 장점 334
1.2 클래스간의 관계 - 포함 관계 340
1.3 클래스간의 관계 결정하기 341
1.4 단일 상속(single inheritance) 347
1.5 Object클래스 - 모든 클래스의 조상 349

2. 오버라이딩(overriding) 351
2.1 오버라이딩이란? 351
2.2 오버라이딩의 조건 352
2.3 오버로딩 vs. 오버라이딩 353
2.4 super 354
2.5 super() - 조상 클래스의 생성자 356

3. package와 import 360
3.1 패키지(package) 360
3.2 패키지의 선언 361
3.3 import문 364
3.4 import문의 선언 364
3.5 static import문 366

4. 제어자(modifier) 368
4.1 제어자란? 368
4.2 static - 클래스의, 공통적인 368
4.3 final - 마지막의, 변경될 수 없는 369
4.4 abstract - 추상의, 미완성의 371
4.5 접근 제어자(access modifier) 372
4.6 제어자(modifier)의 조합 377

5. 다형성(polymorphism) 378
5.1 다형성이란? 378
5.2 참조변수의 형변환 380
5.3 instanceof 연산자 386
5.4 참조변수와 인스턴스의 연결 394
5.5 매개변수의 다형성 397
5.6 여러 종류의 객체를 배열로 다루기 400

6. 추상클래스(abstract class) 405
6.1 추상 클래스란? 405
6.2 추상 메서드(abstract method) 405
6.3 추상 클래스의 작성 407

7. 인터페이스(interface) 411
7.1 인터페이스란? 411
7.2 인터페이스의 작성 411
7.3 인터페이스의 상속 412
7.4 인터페이스의 구현 412
7.5 인터페이스를 이용한 다중 상속 415
7.6 인터페이스를 이용한 다형성 417
7.7 인터페이스의 장점 420
7.8 인터페이스의 이해 426
7.9 디폴트 메서드, static메서드, private메서드 430

8. 내부 클래스(inner class) 434
8.1 내부 클래스란? 434
8.2 내부 클래스의 종류와 특징 435
8.3 내부 클래스의 선언 435
8.4 내부 클래스의 제어자와 접근성 436
8.5 익명 클래스(anonymous class) 441

ch8 예외 처리(exception handling)
1. 예외 처리(exception handling) 444
1.1 프로그램 오류 444
1.2 예외 클래스의 계층구조 445
1.3 예외 처리하기 - try-catch문 446
1.4 try-catch문에서의 흐름 449
1.5 예외의 발생과 catch블럭 450
1.6 예외 발생시키기 454
1.7 메서드에 예외 선언하기 457
1.8 finally블럭 464
1.9 자동 자원 반환 - try-with-resources문 466
1.10 사용자정의 예외 만들기 469
1.11 예외 되던지기(exception re-throwing) 472
1.12 연결된 예외(chained exception) 474

ch9 java.lang패키지와 유용한 클래스
1. java.lang패키지 480
1.1 Object클래스 480
1.2 String클래스 494
1.3 StringBuffer와 StringBuilder 508
1.4 Math클래스 514
1.5 래퍼(wrapper) 클래스 521

2. 유용한 클래스 526
2.1 java.util.Objects클래스 526
2.2 java.util.Random클래스 530
2.3 정규식(Regular Expression) - java.util.regex 535
2.4 java.util.Scanner클래스 540
2.5 java.util.StringTokenizer클래스 543
2.6 java.math.BigInteger클래스 548
2.7 java.math.BigDecimal클래스 551

ch10 날짜와 시간 & 형식
1. 날짜와 시간 558
1.1 Calendar와 Date 558

2. 형식화 클래스 570
2.1 DecimalFormat 570
2.2 SimpleDateFormat 574
2.3 ChoiceFormat 578
2.4 MessageFormat 579

3. java.time패키지 582
3.1 java.time패키지의 핵심 클래스 582
3.2 LocalDate와 LocalTime 585
3.3 Instant 590
3.4 LocalDateTime과 ZonedDateTime 591
3.5 TemporalAdjusters 595
3.6 Period와 Duration 597
3.7 파싱과 포맷 602

ch11 컬렉션 프레임웍
1. 컬렉션 프레임웍(collections framework) 608
1.1 컬렉션 프레임웍의 핵심 인터페이스 608
1.2 ArrayList와 Vector 615
1.3 LinkedList 626
1.4 Stack과 Queue 634
1.5 Iterator, ListIterator, Enumeration 644
1.6 Arrays 654
1.7 Comparator와 Comparable 658
1.8 HashSet 661
1.9 TreeSet 668
1.10 HashMap과 Hashtable 674
1.11 TreeMap 684
1.12 Properties 688
1.13 Collections 694
1.14 컬렉션 클래스 정리 & 요약 699

ch12 모던 자바 기능
1. 지네릭스(generics) 702
1.1 지네릭스란? 702
1.2 지네릭 클래스의 선언 703
1.3 지네릭 클래스의 객체 생성과 사용 706
1.4 제한된 지네릭 클래스 709
1.5 와일드 카드 711
1.6 지네릭 메서드 717
1.7 지네릭 타입의 형변환 720
1.8 지네릭 타입의 제거 722

2. 열거형 724
2.1 열거형이란? 724
2.2 열거형의 정의와 사용 725
2.3 열거형에 멤버 추가하기 728
2.4 열거형의 이해 731

3. 애너테이션(annotation) 735
3.1 애너테이션이란? 735
3.2 표준 애너테이션 736
3.3 메타 애너테이션 744
3.4 애너테이션 타입 정의하기 748

4. 레코드(record) 754
4.1 레코드란? 754
4.2 레코드의 특징 755
4.3 레코드의 중첩 760
4.4 지네릭 레코드 762
4.5 레코드와 애너테이션 764

5. 실드 클래스(sealed class) 766
5.1 실드 클래스란? 766
5.2 실드 클래스의 제약 조건 767
5.3 실드 클래스와 switch식 769

6. 모듈(module) 774
6.1 모듈이란? 774
6.2 모듈 설명자 - module-info.java 776
6.3 이름없는 모듈과 java.base모듈 779
6.4 전이적 의존성과 순환 의존성 786
6.5 모듈의 컴파일과 실행 788
6.6 자동 모듈 793

ch13 쓰레드
1. 쓰레드 796
1.1 프로세스와 쓰레드 796
1.2 쓰레드의 구현과 실행 798
1.3 start()와 run() 802
1.4 싱글쓰레드와 멀티쓰레드 806
1.5 쓰레드의 우선순위 812
1.6 쓰레드 그룹(thread group) 815
1.7 데몬 쓰레드(daemon thread) 818
1.8 쓰레드의 실행제어 822

2. 쓰레드의 동기화 841
2.1 synchronized를 이용한 동기화 841
2.2 wait()과 notify() 845
2.3 Lock과 Condition을 이용한 동기화 853
2.4 volatile 860
2.5 fork & join 프레임웍 862

3. 가상 쓰레드(virtual thread) 867
3.1 가상 쓰레드란? 867
3.2 가상 쓰레드의 생성과 사용 868
3.3 가상 쓰레드의 특징 869
3.4 플랫폼 쓰레드와 가상 쓰레드 871
3.5 가상 쓰레드의 상태 878
3.6 가상 쓰레드 작성시 주의사항 884
3.7 Continuation과 StackChunk 885

4. Executor와 ExecutorService 889
4.1 Executor 889
4.2 ThreadFactory 890
4.3 ExecutorService 892
4.4 쓰레드 풀(thread pool) 898
4.5 Future903
4.6 CompletableFuture 913

ch14 람다와 스트림
1. 람다식(Lambda expression) 928
1.1 람다식이란? 928
1.2 람다식 작성하기 929
1.3 함수형 인터페이스(Functional Interface) 931
1.4 java.util.function패키지 936
1.5 Function의 합성과 Predicate의 결합 942
1.6 메서드 참조 946

2. 스트림(stream) 948
2.1 스트림이란? 948
2.2 스트림 만들기 953
2.3 스트림의 중간연산 958
2.4 Optional〈T〉와 OptionalInt 971
2.5 스트림의 최종연산 976
2.6 collect() 980
2.7 Collector구현하기 997
2.8 스트림의 변환 1000

ch15 입출력(I/O)
1. 자바에서의 입출력 1004
1.1 입출력이란? 1004
1.2 스트림(stream) 1004
1.3 바이트 기반 스트림 - InputStream, OutputStream 1005
1.4 보조 스트림 1007
1.5 문자 기반 스트림 - Reader, Writer 1008

2. 바이트기반 스트림 1010
2.1 InputStream과 OutputStream 1010
2.2 ByteArrayInputStream과 ByteArrayOutputStream 1012
2.3 FileInputStream과 FileOutputStream 1016

3. 바이트 기반의 보조 스트림 1019
3.1 FilterInputStream과 FilterOutputStream 1019
3.2 BufferedInputStream과 BufferedOutputStream 1020
3.3 DataInputStream과 DataOutputStream 1023
3.4 SequenceInputStream 1029
3.5 PrintStream 1031

4. 문자기반 스트림 1035
4.1 Reader와 Writer 1035
4.2 FileReader와 FileWriter 1037
4.3 PipedReader와 PipedWriter 1039
4.4 StringReader와 StringWriter 1041

5. 문자기반의 보조스트림 1042
5.1 BufferedReader와 BufferedWriter 1042
5.2 InputStreamReader와 OutputStreamWriter 1043

6. 표준 입출력과 File 1045
6.1 표준 입출력 - System.in, System.out, System.err 1045
6.2 표준입출력의 대상변경 - setOut(), setErr(), setIn() 1047
6.3 RandomAccessFile 1049
6.4 File 1053

7. 직렬화(Serialization) 1072
7.1 직렬화란? 1072
7.2 ObjectInputStream, ObjectOutputStream 1073
7.3 직렬화 가능한 클래스 만들기 - Serializable, transient 1075
7.4 직렬화가능한 클래스의 버전관리 1081

ch16 네트워킹(networking)
1. 네트워킹(networking) 1084
1.1 클라이언트/서버(client/server) 1084
1.2 IP주소(IP address) 1086
1.3 InetAddress 1087
1.4 URL과 URI 1089
1.5 URLConnection 1092

2. 소켓 프로그래밍 1097
2.1 TCP와 UDP 1097
2.2 TCP소켓 프로그래밍 1098
2.3 UDP소켓 프로그래밍 1116

교환 및 환불안내

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