이 책은 최신 안드로이드 스튜디오와 코틀린 프로그래밍 언어 및 안드로이드 핵심 컴포넌트를 사용해서 안드로이드 앱 개발을 하는 데 필요한 내용과 기법을 알려준다.여러분이 어떤 언어나 형태로든 프로그래밍을 해 본 경험이 있다면 이 책을 읽는 데 문제가 없을 것이다. 윈도우나 맥OS 또는 리눅스가 실행되는 컴퓨터가 있고, 최신 안드로이드 스튜디오를 다운로드할 수 있으면 시작할 준비가 된 것이다.
목차가 많아서 접은글로 작성 하였습니다. 아래를 클릭하시면 확인 할 수 있습니다,
CHAPTER 1 개요 1
1.1 소스 코드 다운로드하기 2
1.2 단축키와 코드 표기 3
1.3 독자 A/S 3
1.4 오탈자 3
CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기 4
2.1 개발 시스템 요구 사항 4
2.2 안드로이드 스튜디오 패키지 다운로드하기 4
2.3 안드로이드 스튜디오 설치하기 5
2.4 안드로이드 스튜디오 웰컴 스크린 8
2.5 안드로이드 SDK 패키지 설치하기 9
2.6 명령행에서 안드로이드 SDK 도구 사용하기 12
2.7 안드로이드 스튜디오 메모리 관리 15
2.8 안드로이드 스튜디오와 SDK 버전 업데이트하기 16
2.9 자동 import 설정하기 17
2.10 요약 18
CHAPTER 3 안드로이드 스튜디오로 예제 앱 만들기 19
3.1 프로젝트 개요 19
3.2 새로운 안드로이드 프로젝트 생성하기 19
3.3 액티비티 생성하기 21
3.4 프로젝트 구성하기 21
3.5 예제 앱 변경하기 23
3.6 UI 변경하기 24
3.7 레이아웃과 리소스 파일 살펴보기 30
3.8 코틀린 확장 플러그인 추가하기 33
3.9 버튼의 이벤트 처리하기 34
3.10 요약 35
CHAPTER 4 안드로이드 스튜디오에서 AVD 생성하기 36
4.1 AVD 개요 36
4.2 새로운 AVD 생성하기 37
4.3 에뮬레이터 시작시키기 42
4.4 AVD에서 앱 실행하기 43
4.5 여러 장치에서 앱 실행하기 44
4.6 실행 중인 앱 중단하기 45
4.7 어두운 테마 지원 45
4.8 도구 창에서 에뮬레이터 실행하기 46
4.9 AVD 구성 파일 48
4.10 요약 48
CHAPTER 5 안드로이드 스튜디오 AVD 에뮬레이터 사용 및 구성하기 49
5.1 에뮬레이터 환경 49
5.2 에뮬레이터 툴바 50
5.3 줌 모드 사용하기 51
5.4 에뮬레이터 창의 크기 조정 51
5.5 확장 제어 옵션 51
5.6 스냅샷 사용하기 54
5.7 모의 지문 구성하기 56
5.8 도구 창 모드의 에뮬레이터 58
5.9 요약 58
CHAPTER 6 안드로이드 스튜디오 UI 둘러보기 59
6.1 웰컴 스크린 59
6.2 메인 창 60
6.3 도구 창 62
6.4 안드로이드 스튜디오의 단축키 65
6.5 스위처와 최근 파일 기능을 이용한 내비게이션 66
6.6 안드로이드 스튜디오 테마 변경하기 67
6.7 요약 68
CHAPTER 7 실제 안드로이드 장치에서 앱 테스트하기 69
7.1 ADB 개요 69
7.2 안드로이드 장치에서 ADB 활성화하기 70
7.2.1 맥OS에서 ADB 구성하기 70
7.2.2 윈도우에서 ADB 구성하기 71
7.2.3 리눅스에서 ADB 구성하기 72
7.3 adb 연결 테스트하기 73
7.4 요약 74
CHAPTER 8 안드로이드 스튜디오 코드 편집기 75
8.1 안드로이드 스튜디오 코드 편집기 75
8.2 편집기 창 분할하기 78
8.3 코드 자동 완성 79
8.4 문장 자동 완성 81
8.5 매개변수 정보 81
8.6 매개변수 이름 힌트 81
8.7 코드 자동 생성 82
8.8 코드 접어 감추기 83
8.9 빠른 문서 검색 84
8.10 소스 코드 형식 변경 85
8.11 라이브 템플릿 86
8.12 요약 87
CHAPTER 9 안드로이드 아키텍처 개요 88
9.1 안드로이드 소프트웨어 스택 88
9.2 리눅스 커널 88
9.3 안드로이드 런타임 ― ART 89
9.4 안드로이드 라이브러리 90
9.4.1 C/C++ 라이브러리 91
9.5 앱 프레임워크 91
9.6 앱 92
9.7 요약 92
CHAPTER 10 안드로이드 앱의 핵심 요소 93
10.1 안드로이드 액티비티 93
10.2 안드로이드 프래그먼트 94
10.3 안드로이드 인텐트 94
10.4 브로드캐스트 인텐트 94
10.5 브로드캐스트 수신자 95
10.6 안드로이드 서비스 95
10.7 콘텐트 제공자 96
10.8 앱 매니페스트 96
10.9 앱 리소스 96
10.10 앱 컨텍스트 96
10.11 요약 97
CHAPTER 11 코틀린 개요 98
11.1 코틀린이란? 98
11.2 코틀린과 자바 98
11.3 자바 코드를 코틀린 코드로 변환하기 99
11.4 코틀린과 안드로이드 스튜디오 99
11.5 코틀린 코드 테스트하기 99
11.6 코틀린과 세미콜론 101
11.7 요약 102
CHAPTER 12 코틀린 데이터 타입, 변수, Null 처리 103
12.1 코틀린 데이터 타입 103
12.2 가변 변수 107
12.3 불변 변수 107
12.4 가변 변수와 불변 변수 선언하기 107
12.5 데이터 타입은 객체다 108
12.6 타입 애노테이션과 타입 추론 109
12.7 null 가능 타입 110
12.8 안전 호출 연산자 111
12.9 Not-null 어서션 112
12.10 Null 가능 타입과 let 함수 113
12.11 늦초기화(lateinit) 114
12.12 엘비스 연산자 115
12.13 타입 변환과 타입 검사 115
12.14 요약 116
CHAPTER 13 코틀린 연산자와 표현식 117
13.1 코틀린의 표현식 문법 117
13.2 기본적인 대입 연산자 117
13.3 코틀린 산술 연산자 118
13.4 복합 대입 연산자 118
13.5 증가와 감소 연산자 119
13.6 동등 연산자 120
13.7 논리 연산자 121
13.8 범위 연산자 121
13.9 비트 연산자 122
13.10 요약 125
CHAPTER 14 코틀린 흐름 제어 126
14.1 루프 흐름 제어 126
14.2 조건 흐름 제어 131
14.3 요약 133
CHAPTER 15 코틀린 함수와 람다 개요 134
15.1 함수란? 134
15.2 코틀린 함수 선언하기 134
15.3 코틀린 함수 호출하기 135
15.4 단일 표현식 함수 136
15.5 지역 함수 136
15.6 지명 인자 137
15.7 매개변수 기본값 선언하기 137
15.8 가변 인자 138
15.9 람다식 139
15.10 고차 함수 140
15.11 요약 142
CHAPTER 16 코틀린 객체지향 프로그래밍 143
16.1 객체란? 143
16.2 클래스란? 143
16.3 코틀린 클래스 정의하기 143
16.4 클래스에 속성 추가하기 144
16.5 함수 정의하기 144
16.6 클래스 인스턴스 생성하고 초기화하기 145
16.7 기본과 보조 생성자 145
16.8 초기화 블록 148
16.9 함수 호출과 속성 사용하기 148
16.10 커스텀 접근자 149
16.11 중첩 클래스와 내부 클래스 151
16.12 동반 객체 151
16.13 요약 154
CHAPTER 17 상속과 서브 클래스 155
17.1 상속과 서브 클래스 개요 155
17.2 서브 클래스 생성하기 155
17.3 상속 구현 예 157
17.4 서브 클래스의 기능 확장하기 158
17.5 상속받은 함수 오버라이딩하기 158
17.6 커스텀 보조 생성자 추가하기 160
17.7 SavingsAccount 클래스 사용하기 161
17.8 요약 161
CHAPTER 18 안드로이드 뷰 바인딩 개요 162
18.1 findViewById() 함수와 합성 속성 162
18.2 뷰 바인딩 163
18.3 AndroidSample 프로젝트 변환하기 164
18.4 뷰 바인딩 활성화하기 164
18.5 뷰 바인딩 사용하기 165
18.6 방법 선택하기 166
18.7 예제 프로젝트의 뷰 바인딩 166
18.8 프로젝트에서 뷰 바인딩을 사용하도록 변경하기 166
18.9 요약 167
CHAPTER 19 안드로이드 앱과 액티비티 생명주기 168
19.1 안드로이드 앱과 리소스 관리 168
19.2 안드로이드 프로세스 상태 169
19.3 액티비티 생명주기 170
19.4 액티비티 스택 170
19.5 액티비티 상태 171
19.6 구성 변경 172
19.7 상태 변경 처리하기 172
19.8 요약 172
CHAPTER 20 액티비티 상태 변경 처리하기 174
20.1 최신과 종전의 생명주기 기법 174
20.2 Activity와 Fragment 클래스 174
20.3 동적 상태 vs. 영속적 상태 176
20.4 안드로이드 생명주기 함수 177
20.5 액티비티/프래그먼트 생애 179
20.6 폴더블 장치와 다중 실행 재개 상태 180
20.7 액티비티가 다시 시작되지 않게 하기 181
20.8 생명주기 함수의 제약 181
20.9 요약 182
CHAPTER 21 액티비티 상태 변화 예제 183
21.1 상태 변화 예제 프로젝트 생성하기 183
21.2 사용자 인터페이스 디자인하기 184
21.3 액티비티 생명주기 함수 오버라이딩 185
21.4 로그캣 패널의 메시지 필터링하기 187
21.5 앱 실행하기 188
21.6 액티비티로 실험하기 189
21.7 요약 190
CHAPTER 22 액티비티 상태를 저장하고 복원하기 191
22.1 동적 상태 저장 191
22.2 사용자 인터페이스 상태의 자동 저장과 복원 191
22.3 Bundle 클래스 193
22.4 상태 데이터 저장하기 194
22.5 상태 데이터 복원하기 195
22.6 앱 테스트하기 195
22.7 요약 196
CHAPTER 23 안드로이드 뷰, 뷰 그룹, 레이아웃 197
23.1 서로 다른 안드로이드 장치를 위한 디자인 197
23.2 뷰와 뷰 그룹 197
23.3 안드로이드 레이아웃 매니저 198
23.4 뷰 계층 구조 199
23.5 사용자 인터페이스 생성 200
23.6 요약 201
CHAPTER 24 안드로이드 스튜디오 레이아웃 편집기 살펴보기 202
24.1 Basic vs. Empty 액티비티 템플릿 202
24.2 안드로이드 스튜디오 레이아웃 편집기 206
24.3 디자인 모드 206
24.4 팔레트 207
24.5 디자인 모드와 레이아웃 뷰 208
24.6 코드 모드 209
24.7 분할 모드 210
24.8 속성 설정하기 210
24.9 변형 212
24.10 Tools 속성 설정하기 212
24.11 뷰 변환하기 215
24.12 샘플 데이터 보여 주기 215
24.13 커스텀 장치 정의 생성하기 216
24.14 현재 장치 변경하기 217
24.15 레이아웃 확인(다중 레이아웃 미리보기) 217
24.16 요약 218
CHAPTER 25 안드로이드 ConstraintLayout 개요 219
25.1 ConstraintLayout의 핵심 개념 219
25.2 기준선 정렬 223
25.3 위젯 크기 구성하기 224
25.4 지시선 224
25.5 그룹 225
25.6 베리어 225
25.7 플로우 227
25.8 비율 228
25.9 ConstraintLayout의 장점 228
25.10 ConstraintLayout 가용성 228
25.11 요약 229
CHAPTER 26 안드로이드 스튜디오에서 ConstraintLayout 사용하기 230
26.1 디자인 뷰와 레이아웃 뷰 230
26.2 자동-연결 231
26.3 제약 추론 232
26.4 수동 연결 232
26.5 속성 창에서 제약 추가하기 234
26.6 속성 창에서 제약 보기 234
26.7 제약 삭제하기 234
26.8 제약 바이어스 조정하기 235
26.9 ConstraintLayout 마진 이해하기 235
26.10 상대 제약과 바이어스의 중요성 237
26.11 위젯의 크기 구성하기 239
26.12 디자인 시점의 Tools 속성 적용/미적용 전환하기 240
26.13 지시선 추가하기 241
26.14 베리어 추가하기 243
26.15 그룹 추가하기 244
26.16 플로우 사용하기 245
26.17 위젯의 그룹 정렬 246
26.18 다른 레이아웃을 ConstraintLayout으로 변환하기 246
26.19 요약 247
CHAPTER 27 안드로이드 스튜디오에서 ConstraintLayout 체인과 비율 사용하기 248
27.1 체인 생성하기 248
27.2 체인 스타일 변경하기 251
27.3 Spread inside 체인 스타일 251
27.4 Packed 체인 스타일 251
27.5 바이어스를 사용한 Packed 체인 스타일 252
27.6 Weighted 체인 252
27.7 비율 사용하기 254
27.8 요약 255
CHAPTER 28 ConstraintLayout 예제 프로젝트 256
28.1 ConstraintLayout 예제 프로젝트 생성하기 256
28.2 새로운 액티비티 생성하기 256
28.3 자동-연결 설정과 이미지 파일 추가하기 258
28.4 사용자 인터페이스에 위젯 추가하기 259
28.5 제약 추가하기 262
28.6 레이아웃 테스트하기 264
28.7 레이아웃 탐색기 사용하기 264
28.8 요약 266
CHAPTER 29 XML 레이아웃 직접 작성하기 267
29.1 XML 레이아웃 직접 생성하기 267
29.2 XML 직접 작성 vs. 레이아웃 편집기의 디자인 뷰 사용 271
29.3 요약 271
CHAPTER 30 ConstraintSet으로 ConstraintLayout 사용하기 272
30.1 코틀린 코드 vs. XML 레이아웃 파일 272
30.2 뷰 생성하기 273
30.3 뷰 속성 273
30.4 ConstraintSet 274
30.5 요약 278
CHAPTER 31 안드로이드 ConstraintSet 예제 프로젝트 279
31.1 안드로이드 스튜디오로 예제 프로젝트 생성하기 279
31.2 액티비티에 뷰 추가하기 279
31.3 뷰 속성 설정하기 281
31.4 뷰 id 생성하고 사용하기 282
31.5 제약 설정 구성하기 282
31.6 EditText 뷰 추가하기 284
31.7 dp를 px로 변환하기 285
31.8 요약 286
CHAPTER 32 안드로이드 스튜디오의 ‘변경 적용’ 기능 사용하기 287
32.1 변경 적용 기능 개요 287
32.2 변경 적용 옵션 287
32.3 ‘변경 적용’ 기능 사용하기 288
32.4 변경 적용 설정하기 289
32.5 변경 적용 기능 연습 프로젝트 생성하기 290
32.6 ‘코드 변경 적용’ 기능 사용하기 290
32.7 ‘변경 적용과 액티비티 재시작’ 기능 사용하기 291
32.8 요약 291
CHAPTER 33 안드로이드 이벤트 처리 개요 292
33.1 안드로이드 이벤트 이해하기 292
33.2 android:onClick 리소스 사용하기 293
33.3 이벤트 리스너와 콜백 함수 293
33.4 이벤트 처리 예제 294
33.5 사용자 인터페이스 디자인하기 295
33.6 이벤트 리스너와 콜백 함수 296
33.7 이벤트 소비하기 297
33.8 요약 299
CHAPTER 34 터치와 다중 터치 이벤트 처리하기 300
34.1 터치 이벤트 처리하기 300
34.2 MotionEvent 객체 301
34.3 터치 액션 이해하기 301
34.4 다중 터치 처리하기 302
34.5 다중 터치 앱 생성하기 302
34.6 액티비티 사용자 인터페이스 디자인하기 303
34.7 터치 이벤트 리스너 구현하기 304
34.8 앱 실행하기 306
34.9 요약 307
CHAPTER 35 안드로이드 제스처 감지 클래스로 일반 제스처 처리하기 308
35.1 일반 제스처 감지와 처리하기 308
35.2 제스처 처리 프로젝트 생성하기 309
35.3 리스너 클래스 구현하기 310
35.4 GestureDetectorCompat 인스턴스 생성하기 312
35.5 onTouchEvent() 함수 구현하기 312
35.6 앱 테스트하기 313
35.7 요약 313
CHAPTER 36 커스텀 제스처와 핀치 인식 구현하기 314
36.1 안드로이드 제스처 빌더 앱 314
36.2 GestureOverlayView 클래스 314
36.3 제스처 감지하기 314
36.4 제스처 확인하기 315
36.5 제스처 빌더 앱의 설치와 실행 315
36.6 제스처 파일 생성하기 315
36.7 예제 프로젝트 생성하기 316
36.8 SD 카드 영역에서 제스처 파일 추출하기 316
36.9 제스처 파일을 프로젝트에 추가하기 317
36.10 사용자 인터페이스 디자인하기 317
36.11 제스처 파일 로드하기 318
36.12 이벤트 리스너 등록하기 319
36.13 onGesturePerformed 함수 구현하기 319
36.14 앱 테스트하기 321
36.15 GestureOverlayView 구성하기 321
36.16 제스처 가로채기 321
36.17 핀치 제스처 처리하기 322
36.18 핀치 제스처 예제 프로젝트 322
36.19 요약 325
CHAPTER 37 안드로이드 프래그먼트 개요 326
37.1 프래그먼트란? 326
37.2 프래그먼트 생성하기 326
37.3 레이아웃 XML 파일을 사용하여 액티비티에 프래그먼트 추가하기 328
37.4 코드에서 프래그먼트 추가하고 관리하기 329
37.5 프래그먼트 이벤트 처리하기 331
37.6 프래그먼트 간의 통신 구현하기 332
37.7 요약 333
CHAPTER 38 프래그먼트 사용 예제 프로젝트 335
38.1 예제 프래그먼트 앱 개요 335
38.2 예제 프로젝트 생성하기 335
38.3 첫 번째 프래그먼트 레이아웃 생성하기 336
38.4 뷰 바인딩을 사용하도록 프래그먼트 변경하기 338
38.5 두 번째 프래그먼트 추가하기 339
38.6 액티비티에 프래그먼트 추가하기 340
38.7 ToolbarFragment가 액티비티와 통신하게 만들기 342
38.8 액티비티에서 TextFragment로 통신하기 345
38.9 앱 테스트하기 346
38.10 요약 346
CHAPTER 39 최신 안드로이드 앱 아키텍처: Jetpack 347
39.1 안드로이드 Jetpack이란? 347
39.2 종전 아키텍처 347
39.3 최신 안드로이드 아키텍처 348
39.4 ViewModel 컴포넌트 348
39.5 LiveData 컴포넌트 349
39.6 ViewModel의 상태 저장 350
39.7 LiveData와 데이터 바인딩 350
39.8 안드로이드 생명주기 351
39.9 리포지터리 모듈 351
39.10 요약 352
CHAPTER 40 Jetpack ViewModel 예제 프로젝트 353
40.1 프로젝트 개요 353
40.2 ViewModel 예제 앱 생성하기 353
40.3 프로젝트 살펴보기 354
40.3.1 메인 액티비티 354
40.3.2 콘텐츠 프래그먼트 355
40.3.3 ViewModel 356
40.4 프래그먼트 레이아웃 디자인하기 356
40.5 ViewModel 구현하기 357
40.6 ViewModel에 프래그먼트 연결하기 358
40.7 프래그먼트 변경하기 359
40.8 ViewModel 데이터 사용하기 360
40.9 프로젝트 테스트하기 360
40.10 요약 361
CHAPTER 41 Jetpack LiveData 예제 프로젝트 362
41.1 LiveData 핵심 요약 362
41.2 ViewModel에 LiveData 추가하기 362
41.3 옵저버 구현하기 364
41.4 요약 366
CHAPTER 42 Jetpack 데이터 바인딩 개요 367
42.1 데이터 바인딩 개요 367
42.2 데이터 바인딩의 핵심 구성요소 367
42.3 요약 375
CHAPTER 43 Jetpack 데이터 바인딩 예제 프로젝트 376
43.1 중복 코드 제거하기 376
43.2 데이터 바인딩 활성화하기 377
43.3 레이아웃 요소 추가하기 378
43.4 레이아웃 파일에 데이터 요소 추가하기 379
43.5 바인딩 클래스 사용하기 379
43.6 데이터 바인딩 변수에 ViewModel 인스턴스 지정하기 381
43.7 바인딩 표현식 추가하기 381
43.8 환전 함수 추가하기 382
43.9 리스너 바인딩 추가하기 383
43.10 앱 테스트하기 383
43.11 요약 384
CHAPTER 44 ViewModel 상태 저장 예제 프로젝트 385
44.1 ViewModel 상태 저장 이해하기 385
44.2 ViewModel 상태 저장 구현하기 386
44.3 상태 저장 및 복원하기 387
44.4 ViewModelDemo 프로젝트에 상태 저장 지원 추가하기 388
44.5 요약 390
CHAPTER 45 안드로이드 생명주기-인식 컴포넌트 사용하기 391
45.1 생명주기-인식 391
45.2 생명주기 소유자 392
45.3 생명주기 옵저버 393
45.4 생명주기 상태와 이벤트 393
45.5 요약 395
CHAPTER 46 Jetpack 생명주기-인식 예제 프로젝트 396
46.1 생명주기 예제 프로젝트 생성하기 396
46.2 생명주기 옵저버 생성하기 396
46.3 옵저버 추가하기 398
46.4 옵저버 테스트하기 399
46.5 생명주기 소유자 생성하기 400
46.6 커스텀 생명주기 소유자 테스트하기 402
46.7 요약 402
CHAPTER 47 내비게이션 아키텍처 컴포넌트 개요 403
47.1 내비게이션 이해하기 403
47.2 내비게이션 호스트 선언하기 405
47.3 내비게이션 그래프 406
47.4 내비게이션 컨트롤러 사용하기 408
47.5 내비게이션 액션 실행하기 409
47.6 인자 전달 409
47.7 요약 410
CHAPTER 48 Jetpack 내비게이션 컴포넌트 예제 프로젝트 411
48.1 NavigationDemo 프로젝트 생성하기 411
48.2 빌드 구성에 내비게이션 라이브러리 추가하기 411
48.3 내비게이션 그래프 리소스 파일 생성하기 412
48.4 내비게이션 호스트 선언하기 413
48.5 내비게이션 목적지 추가하기 415
48.6 목적지 프래그먼트 레이아웃 디자인하기 417
48.7 내비게이션 그래프에 액션 추가하기 418
48.8 OnFragmentInteractionListener 구현하기 419
48.9 목적지 프래그먼트에 뷰 바인딩 지원 추가하기 420
48.10 액션 실행하기 421
48.11 Safeargs를 사용한 데이터 전달 422
48.12 요약 426
CHAPTER 49 MotionLayout 개요 427
49.1 MotionLayout이란? 427
49.2 MotionLayout 클래스 427
49.3 MotionScene 428
49.4 ConstraintSet 구성하기 429
49.5 커스텀 속성 430
49.6 애니메이션 시작하기 431
49.7 호 형태의 이동 433
49.8 키 프레임 433
49.9 애니메이션 속도 변경 436
49.10 KeyTrigger 437
49.11 사이클 키 프레임과 시간 사이클 키 프레임 438
49.12 코드에서 애니메이션 시작하기 438
49.13 요약 439
CHAPTER 50 MotionLayout 편집기 예제 프로젝트 440
50.1 MotionLayoutDemo 프로젝트 생성하기 440
50.2 ConstraintLayout을 MotionLayout으로 변환하기 440
50.3 시작과 끝 ConstraintSet 구성하기 442
50.4 MotionLayout 애니메이션 미리보기 444
50.5 OnClick 제스처 추가하기 445
50.6 속성 키 프레임 추가하기 446
50.7 CustomAttribute 추가하기 448
50.8 위치 키 프레임 추가하기 450
50.9 요약 452
CHAPTER 51 MotionLayout KeyCycle 453
51.1 사이클 키 프레임 개요 453
51.2 사이클 편집기 사용하기 457
51.3 KeyCycleDemo 프로젝트 생성하기 459
51.4 시작과 끝 ConstraintSet 구성하기 459
51.5 KeyCycle 생성하기 461
51.6 애니메이션 미리보기 463
51.7 MotionScene 파일에 KeyFrameSet 추가하기 463
51.8 요약 466
CHAPTER 52 플로팅 액션 버튼과 스낵바 사용하기 467
52.1 머티리얼 디자인 467
52.2 디자인 라이브러리 468
52.3 플로팅 액션 버튼(FAB) 468
52.4 스낵바 469
52.5 예제 프로젝트 생성하기 469
52.6 프로젝트 살펴보기 469
52.7 프래그먼트 간의 이동 코드 삭제하기 471
52.8 플로팅 액션 버튼 변경하기 472
52.9 스낵바에 액션 추가하기 473
52.10 요약 474
CHAPTER 53 탭 인터페이스 생성하기 475
53.1 ViewPager2 개요 475
53.2 TabLayout 컴포넌트 개요 475
53.3 TabLayoutDemo 프로젝트 생성하기 476
53.4 첫 번째 프래그먼트 생성하기 477
53.5 프래그먼트 복제하기 478
53.6 TabLayout과 ViewPager2 추가하기 480
53.7 FragmentStateAdapter 생성하기 481
53.8 초기화 작업하기 482
53.9 앱 테스트하기 483
53.10 TabLayout 커스터마이징 484
53.11 요약 485
CHAPTER 54 RecyclerView와 CardView 사용하기 486
54.1 RecyclerView 개요 486
54.2 CardView 개요 489
54.3 요약 490
CHAPTER 55 RecyclerView와 CardView 예제 프로젝트 491
55.1 CardDemo 프로젝트 생성하기 491
55.2 Basic Activity 프로젝트 변경하기 491
55.3 CardView 레이아웃 디자인하기 492
55.4 RecyclerView 추가하기 493
55.5 이미지 파일 추가하기 493
55.6 RecyclerView 어댑터 생성하기 494
55.7 RecyclerView 컴포넌트 초기화하기 496
55.8 앱 테스트하기 498
55.9 카드 선택에 응답하기 498
55.10 요약 499
CHAPTER 56 레이아웃 편집기에서 샘플 데이터 사용하기 500
56.1 프로젝트에 샘플 데이터 추가하기 500
56.2 커스텀 샘플 데이터 사용하기 504
56.3 요약 507
CHAPTER 57 앱 바와 컬랩싱 툴바 레이아웃 사용하기 508
57.1 AppBar 개요 508
57.2 예제 프로젝트 509
57.3 RecyclerView와 Toolbar 연동시키기 509
57.4 컬랩싱 툴바 레이아웃 개요 511
57.5 제목과 스크림 색상 변경하기 514
57.6 요약 515
CHAPTER 58 안드로이드 스튜디오 기본/상세 플로 516
58.1 기본/상세 플로 개요 516
58.2 기본/상세 플로 액티비티 생성하기 518
58.3 기본/상세 플로 템플릿 살펴보기 519
58.4 기본/상세 플로 템플릿 변경하기 520
58.5 콘텐츠 모델 변경하기 520
58.6 상세 패널 변경하기 522
58.7 WebsiteDetailFragment 클래스 변경하기 524
58.8 WebsiteListFragment 클래스 수정하기 525
58.9 매니페스트 퍼미션 추가하기 526
58.10 앱 실행하기 526
58.11 요약 527
CHAPTER 59 안드로이드 인텐트 개요 528
59.1 인텐트 개요 528
59.2 명시적 인텐트 529
59.3 액티비티에서 데이터 반환하기 530
59.4 암시적 인텐트 531
59.5 인텐트 필터 사용하기 532
59.6 인텐트 사용 가능 여부 확인하기 533
59.7 요약 533
CHAPTER 60 명시적 인텐트 예제 프로젝트 535
60.1 예제 프로젝트 생성하기 535
60.2 MainActivity의 사용자 인터페이스 디자인하기 535
60.3 두 번째 액티비티 클래스 생성하기 537
60.4 ActivityB의 사용자 인터페이스 레이아웃 디자인하기 538
60.5 앱의 매니페스트 파일 살펴보기 539
60.6 인텐트 생성하기 540
60.7 인텐트 데이터 추출하기 541
60.8 서브 액티비티로 ActivityB 시작시키기 542
60.9 서브 액티비티에서 데이터 반환하기 543
60.10 앱 테스트하기 544
60.11 요약 544
CHAPTER 61 암시적 인텐트 예제 프로젝트 545
61.1 암시적 인텐트 예제 프로젝트 생성하기 545
61.2 사용자 인터페이스 디자인하기 545
61.3 암시적 인텐트 생성하기 546
61.4 암시적 인텐트로 시작되는 액티비티 생성하기 547
61.5 사용자 인터페이스에 웹 뷰 추가하기 548
61.6 인텐트 URL 얻기 548
61.7 MyWebView 프로젝트의 매니페스트 파일 변경하기 549
61.8 장치에 MyWebView 패키지 설치하기 551
61.9 앱 테스트하기 552
61.10 요약 553
CHAPTER 62 브로드캐스트 인텐트와 브로드캐스트 수신자 554
62.1 브로드캐스트 인텐트 개요 554
62.2 브로드캐스트 수신자 개요 555
62.3 브로드캐스트 수신자로부터 결과 데이터 받기 557
62.4 스티키 브로드캐스트 인텐트 557
62.5 브로드캐스트 인텐트 예제 프로젝트 558
62.6 예제 앱 생성하기 558
62.7 브로드캐스트 인텐트를 생성하고 전송하기 559
62.8 브로드캐스트 수신자 생성하기 559
62.9 브로드캐스트 수신자 등록하기 561
62.10 브로드캐스트 앱 테스트하기 562
62.11 시스템 브로드캐스트 인텐트 리스닝하기 562
62.12 요약 563
CHAPTER 63 스레드와 AsyncTask 564
63.1 스레드 개요 564
63.2 앱의 메인 스레드 564
63.3 스레드 처리 565
63.4 기본적인 AsyncTask 예제 프로젝트 565
63.5 AsyncTask의 서브 클래스 생성하기 567
63.6 앱 테스트하기 570
63.7 작업 취소하기 571
63.8 요약 571
CHAPTER 64 코틀린 코루틴 개요 572
64.1 코루틴이란? 572
64.2 스레드 vs. 코루틴 573
64.3 코루틴 범위 573
64.4 정지 함수 574
64.5 코루틴 디스패처 574
64.6 코루틴 빌더 575
64.7 Job 576
64.8 코루틴의 정지와 실행 재개 576
64.9 코루틴에서 결과 받기 578
64.10 withContext 사용하기 578
64.11 코루틴 채널 통신 580
64.12 요약 581
CHAPTER 65 코틀린 코루틴 예제 프로젝트 582
65.1 코루틴 예제 앱 생성하기 582
65.2 코루틴 지원 라이브러리 추가하기 582
65.3 사용자 인터페이스 디자인하기 583
65.4 SeekBar 구현하기 584
65.5 정지 함수 추가하기 585
65.6 launchCoroutines 함수 구현하기 586
65.7 앱 테스트하기 586
65.8 요약 587
CHAPTER 66 스타트 서비스와 바운드 서비스 개요 588
66.1 스타트 서비스 588
66.2 인텐트 서비스 589
66.3 바운드 서비스 589
66.4 서비스 생명주기 590
66.5 소멸된 서비스 재시작 옵션 제어하기 591
66.6 매니페스트 파일에 서비스 선언하기 591
66.7 시스템 부팅 시 서비스 시작시키기 593
66.8 요약 593
CHAPTER 67 스타트 서비스 구현 예제 프로젝트 594
67.1 예제 프로젝트 생성하기 594
67.2 사용자 인터페이스 디자인하기 594
67.3 Service 클래스 생성하기 595
67.4 매니페스트 파일에 서비스 추가하기 597
67.5 서비스 시작시키기 597
67.6 JobIntentService 테스트하기 598
67.7 Service 클래스 사용하기 599
67.8 새로운 서비스 생성하기 599
67.9 서비스를 시작하도록 변경하기 600
67.10 앱 실행하기 601
67.11 서비스 작업에 코루틴 사용하기 601
67.12 요약 603
CHAPTER 68 로컬 바운드 서비스 예제 프로젝트 604
68.1 바운드 서비스 이해하기 604
68.2 바운드 서비스 상호작용 옵션 604
68.3 로컬 바운드 서비스 예제 프로젝트 605
68.4 프로젝트에 바운드 서비스 추가하기 605
68.5 Binder 구현하기 606
68.6 서비스에 클라이언트 바인딩하기 608
68.7 예제 프로젝트 마무리하기 610
68.8 앱 테스트하기 611
68.9 요약 611
CHAPTER 69 원격 바운드 서비스 예제 프로젝트 612
69.1 클라이언트에서 원격 서비스로 통신하기 612
69.2 예제 앱 생성하기 612
69.3 사용자 인터페이스 디자인하기 613
69.4 원격 바운드 서비스 구현하기 613
69.5 매니페스트 파일에 원격 서비스 구성하기 614
69.6 원격 서비스를 시작시키고 바인딩하기 615
69.7 원격 서비스에 메시지 전송하기 617
69.8 요약 617
CHAPTER 70 안드로이드 알림 개요 618
70.1 알림 개요 618
70.2 NotifyDemo 프로젝트 생성하기 620
70.3 사용자 인터페이스 디자인하기 620
70.4 두 번째 액티비티 생성하기 621
70.5 알림 채널 생성하기 621
70.6 기본 알림을 생성하고 전달하기 623
70.7 알림에서 액티비티 시작시키기 626
70.8 알림에 액션 추가하기 627
70.9 알림 메시지 묶기 628
70.10 요약 630
CHAPTER 71 안드로이드 직접 응답 알림 구현 631
71.1 DirectReply 프로젝트 생성하기 631
71.2 사용자 인터페이스 디자인하기 631
71.3 알림 채널 생성하기 632
71.4 RemoteInput 객체 생성하기 633
71.5 PendingIntent 객체 생성하기 634
71.6 응답 액션 생성하기 635
71.7 직접 응답 입력 데이터 수신하기 637
71.8 알림 변경하기 638
71.9 요약 639
CHAPTER 72 폴더블 장치와 다중 창 지원 640
72.1 폴더블과 다중 창 지원 640
72.2 폴더블 에뮬레이터 사용하기 642
72.3 다중 창 모드로 전환하기 643
72.4 다중 창 지원을 활성화하고 사용하기 644
72.5 자유형식 모드의 지원 여부 확인하기 644
72.6 다중 창 지원을 앱에서 활성화하기 645
72.7 다중 창 관련 속성 지정하기 645
72.8 액티비티에서 다중 창 모드인지 검사하기 646
72.9 다중 창 관련 통지받기 647
72.10 다중 창 모드에서 액티비티 시작시키기 648
72.11 자유형식 모드로 실행되는 액티비티의 크기와 위치 구성하기 648
72.12 요약 649
CHAPTER 73 안드로이드 SQLite 데이터베이스 개요 650
73.1 데이터베이스 테이블 이해하기 650
73.2 데이터베이스 스키마 개요 651
73.3 열과 데이터 타입 651
73.4 데이터베이스 행 651
73.5 기본 키 개요 651
73.6 SQLite란? 652
73.7 SQL 652
73.8 AVD에서 SQLite 사용해 보기 653
73.9 안드로이드 Room 퍼시스턴스 라이브러리 656
73.10 요약 656
CHAPTER 74 안드로이드 Room 퍼시스턴스 라이브러리 657
74.1 최신 앱 아키텍처 다시 보기 657
74.2 Room 데이터베이스 퍼시스턴스의 핵심 요소 658
74.3 엔터티 이해하기 659
74.4 DAO 662
74.5 Room 데이터베이스 664
74.6 리포지터리 665
74.7 인메모리 데이터베이스 665
74.8 데이터베이스 탐색기 666
74.9 요약 666
CHAPTER 75 TableLayout과 TableRow 개요 667
75.1 TableLayout과 TableRow 667
75.2 Room 데이터베이스 프로젝트 생성하기 669
75.3 LinearLayout으로 변환하기 669
75.4 사용자 인터페이스에 TableLayout 추가하기 670
75.5 TableRow 구성하기 670
75.6 레이아웃에 버튼 추가하기 672
75.7 RecyclerView 추가하기 672
75.8 레이아웃 마진 조정하기 673
75.9 요약 674
CHAPTER 76 Room 데이터베이스와 리포지터리 예제 프로젝트 675
76.1 예제 프로젝트 개요 675
76.2 빌드 구성 변경하기 675
76.3 엔터티 생성하기 676
76.4 DAO 생성하기 678
76.5 Room 데이터베이스 추가하기 679
76.6 리포지터리 추가하기 680
76.7 ViewModel 변경하기 683
76.8 제품 항목 레이아웃 생성하기 685
76.9 RecyclerView 어댑터 추가하기 685
76.10 MainFragment 변경하기 686
76.11 버튼 리스너 추가하기 688
76.12 LiveData 옵저버 추가하기 689
76.13 RecyclerView 초기화하기 690
76.14 RoomDemo 앱 테스트하기 690
76.15 데이터베이스 탐색기 사용하기 690
76.16 요약 692
CHAPTER 77 구글 클라우드 스토리지 액세스하기 693
77.1 스토리지 액세스 프레임워크 693
77.2 스토리지 액세스 프레임워크 사용하기 694
77.3 피커의 파일 내역 선별하기 694
77.4 인텐트 결과 처리하기 696
77.5 파일 내용 읽기 696
77.6 파일에 내용 쓰기 697
77.7 파일 삭제하기 698
77.8 파일의 지속적인 액세스 얻기 698
77.9 요약 699
CHAPTER 78 안드로이드 스토리지 액세스 프레임워크 예제 프로젝트 700
78.1 스토리지 액세스 프레임워크 예제 프로젝트 개요 700
78.2 스토리지 액세스 프레임워크 예제 프로젝트 생성 700
78.3 사용자 인터페이스 디자인하기 701
78.4 요청 코드 선언하기 702
78.5 새로운 스토리지 파일 생성하기 702
78.6 onActivityResult() 함수 703
78.7 스토리지 파일에 데이터 저장하기 705
78.8 스토리지 파일 열고 읽기 707
78.9 스토리지 액세스 앱 테스트하기 709
78.10 요약 710
CHAPTER 79 동영상 재생 구현하기 711
79.1 안드로이드 VideoView 클래스 개요 711
79.2 안드로이드 MediaController 클래스 개요 712
79.3 동영상 재생 예제 프로젝트 생성하기 713
79.4 VideoPlayer 앱의 레이아웃 디자인하기 713
79.5 동영상 파일 다운로드하기 714
79.6 VideoView 구성하기 715
79.7 VideoView에 MediaController 추가하기 716
79.8 onPreparedListener 설정하기 717
79.9 요약 718
CHAPTER 80 안드로이드 PiP 모드 719
80.1 PiP 모드의 기능 719
80.2 PiP 모드 활성화하기 720
80.3 PiP 매개변수 구성하기 721
80.4 PiP 모드 진입하기 721
80.5 PiP 모드 변경 감지하기 722
80.6 PiP 액션 추가하기 722
80.7 요약 723
CHAPTER 81 안드로이드 PiP 예제 프로젝트 724
81.1 PiP 지원 활성화하기 724
81.2 PiP 버튼 추가하기 724
81.3 PiP 모드 진입하기 725
81.4 PiP 모드 변경 감지하기 727
81.5 브로드캐스트 수신자 추가하기 727
81.6 PiP 액션 추가하기 729
81.7 PiP 액션 테스트하기 731
81.8 요약 731
CHAPTER 82 런타임 퍼미션 요청하기 732
82.1 보통 퍼미션과 위험 퍼미션 이해하기 732
82.2 퍼미션 예제 프로젝트 생성하기 734
82.3 퍼미션 확인하기 734
82.4 런타임 시에 퍼미션 요청하기 736
82.5 퍼미션 요청 이유 제공하기 737
82.6 퍼미션 앱 테스트하기 739
82.7 요약 739
CHAPTER 83 안드로이드 오디오 녹음 및 재생하기 740
83.1 오디오 재생하기 740
83.2 MediaRecorder 클래스를 사용해서 오디오 녹음하기 741
83.3 예제 프로젝트 개요 743
83.4 AudioApp 프로젝트 생성하기 743
83.5 사용자 인터페이스 디자인하기 743
83.6 마이크 확인하기 744
83.7 액티비티 초기화하기 745
83.8 recordAudio() 함수 구현하기 747
83.9 stopAudio() 함수 구현하기 747
83.10 playAudio() 함수 구현하기 748
83.11 매니페스트 파일에 퍼미션 구성하기 748
83.12 앱 테스트하기 751
83.13 요약 751
CHAPTER 84 안드로이드 인쇄 프레임워크 사용하기 752
84.1 안드로이드 인쇄 아키텍처 752
84.2 인쇄 서비스 플러그인 752
84.3 구글 클라우드 인쇄 753
84.4 구글 드라이브로 인쇄하기 754
84.5 PDF로 저장하기 754
84.6 안드로이드 장치에서 인쇄하기 754
84.7 안드로이드 앱에 포함되는 인쇄 지원 옵션 755
84.7.1 이미지 인쇄 755
84.7.2 HTML 콘텐츠 생성과 인쇄 756
84.7.3 기존 웹 페이지 인쇄하기 758
84.7.4 커스텀 문서 인쇄하기 759
84.8 요약 759
CHAPTER 85 HTML과 웹 콘텐츠 인쇄 예제 프로젝트 760
85.1 HTML 인쇄 예제 앱 생성하기 760
85.2 동적 HTML 콘텐츠 인쇄하기 760
85.3 기존 웹 페이지 인쇄 예제 앱 생성하기 763
85.4 플로팅 액션 버튼 삭제하기 763
85.5 프래그먼트 간의 이동 코드 삭제하기 764
85.6 사용자 인터페이스 레이아웃 디자인하기 765
85.7 메인 액티비티에서 WebView 사용하기 766
85.8 WebView에 웹 페이지 로드하기 766
85.9 인쇄 메뉴 옵션 추가하기 767
85.10 요약 769
CHAPTER 86 안드로이드 커스텀 문서 인쇄 770
86.1 안드로이드 커스텀 문서 인쇄 개요 770
86.1.1 커스텀 인쇄 어댑터 771
86.2 커스텀 문서 인쇄 프로젝트 준비하기 771
86.3 커스텀 인쇄 어댑터 생성하기 772
86.4 onLayout() 콜백 함수 구현하기 773
86.5 onWrite() 콜백 함수 구현하기 777
86.6 페이지가 인쇄 범위에 있는지 확인하기 779
86.7 페이지 캔버스에 콘텐츠 그리기 780
86.8 인쇄 작업 시작시키기 782
86.9 앱 테스트하기 783
86.10 요약 784
CHAPTER 87 안드로이드 앱 링크 785
87.1 안드로이드 앱 링크 개요 785
87.2 앱 링크 인텐트 필터 785
87.3 앱 링크 인텐트 처리하기 786
87.4 앱을 웹사이트와 연관시키기 787
87.5 요약 788
CHAPTER 88 앱 링크 예제 프로젝트 789
88.1 예제 앱에 관하여 789
88.2 데이터베이스 스키마 789
88.3 프로젝트 실행하기 790
88.4 URL 매핑 추가하기 791
88.5 인텐트 필터 추가하기 793
88.6 인텐트 처리 코드 추가하기 794
88.7 앱 링크 테스트하기 797
88.8 앱 링크를 웹사이트에 연결하기 798
88.9 요약 800
CHAPTER 89 안드로이드 스튜디오 프로파일러 801
89.1 안드로이드 프로파일러 사용하기 801
89.2 최신 프로파일링 활성화하기 801
89.3 안드로이드 프로파일러 도구 창 802
89.4 Sessions 패널 803
89.5 CPU 프로파일러 804
89.6 메모리 프로파일러 808
89.7 네트워크 프로파일러 809
89.8 에너지 프로파일러 810
89.9 요약 811
CHAPTER 90 안드로이드 생체 인증 812
90.1 생체 인증 개요 812
90.2 생체 인증 프로젝트 생성하기 813
90.3 장치의 지문 인증 구성하기 813
90.4 매니페스트 파일에 생체 퍼미션 추가하기 814
90.5 사용자 인터페이스 디자인하기 814
90.6 Toast 메시지를 보여 줄 함수 추가하기 815
90.7 장치의 보안 설정 확인하기 816
90.8 인증 콜백 구성하기 817
90.9 CancellationSignal 추가하기 818
90.10 생체 인증 시작시키기 818
90.11 앱 테스트하기 819
90.12 요약 820
CHAPTER 91 안드로이드 앱 번들 생성, 테스트, 업로딩 821
91.1 앱 출시 준비 절차 821
91.2 안드로이드 앱 번들 821
91.3 구글 플레이 개발자 콘솔 계정 등록하기 822
91.4 콘솔에서 앱 구성하기 823
91.5 구글 플레이 앱 서명 활성화하기 824
91.6 키스토어 파일 생성하기 825
91.7 안드로이드 앱 번들 생성하기 827
91.8 테스트 APK 파일 생성하기 829
91.9 구글 플레이 개발자 콘솔에 앱 번들 업로드하기 830
91.10 앱 번들 살펴보기 831
91.11 테스터 관리하기 832
91.12 테스트를 위한 앱 출시 833
91.13 새 버전의 앱 번들 업로드하기 833
91.14 앱 번들 파일 분석하기 835
91.15 요약 836
CHAPTER 92 안드로이드 동적 기능 모듈 837
92.1 동적 기능 모듈 개요 837
92.2 동적 기능 모듈 아키텍처 838
92.3 동적 기능 모듈 생성하기 839
92.4 기존 모듈을 동적 기능 모듈로 변환하기 841
92.5 동적 기능 모듈 사용하기 844
92.6 대형 동적 기능 모듈 처리하기 846
92.7 요약 847
CHAPTER 93 동적 기능 모듈 예제 프로젝트 848
93.1 DynamicFeature 프로젝트 생성하기 848
93.2 프로젝트에 동적 기능 지원 추가하기 848
93.3 기본 액티비티 UI 디자인하기 850
93.4 동적 기능 모듈 추가하기 851
93.5 동적 기능 모듈 살펴보기 852
93.6 동적 기능 모듈 액티비티 추가하기 854
93.7 launchFeature() 함수 구현하기 857
93.8 테스트를 위해 앱 번들 업로드하기 858
93.9 installFeature() 함수 구현하기 859
93.10 업데이트 리스너 추가하기 861
93.11 대형 다운로드 처리하기 864
93.12 지연 설치 사용하기 866
93.13 동적 기능 모듈 제거하기 866
93.14 요약 866
CHAPTER 94 안드로이드 스튜디오의 그래들 개요 867
94.1 그래들 개요 867
94.2 그래들과 안드로이드 스튜디오 868
94.2.1 합리적인 디폴트 868
94.2.2 의존성 868
94.2.3 빌드 변이 869
94.2.4 매니페스트 항목 869
94.2.5 APK 서명하기 869
94.2.6 ProGuard 지원 869
94.3 최상위 수준의 그래들 빌드 파일 869
94.4 모듈 수준의 그래들 빌드 파일 870
94.5 빌드 파일에 서명 설정 구성하기 873
94.6 명령행에서 그래들 작업 실행하기 875
94.7 요약 876
찾아보기 878
챕터 1부터 챕터 8까지는 안드로이드 스튜디오를 사용하는 방법에 대해서 소개합니다. 스튜디오 설치 및 AVD 연결하여서 디버깅하는 방법, ADB를 통하여 디바이스에서 디버깅하는 방법 등에 대해서 설명되어 있습니다.
챕터 9 에서는 안드로이드 아키텍처와 각종 안드로이드 라이브러리에 대해서 간략히 소개하며 JNI 통하여 C++ 코드를 사용하는 NDK에 설명 합니다.
챕터 11부터 17까지는 안드로이드 스튜디오 3.0부터 지원된 코틀린 언어에 대해서 설명을 합니다. 코틀린 언어의 태생의 목적은 간결하고 안전한 코드를 만드는 것입니다. 코드가 간결하면 일고 이해하기 쉬우며 더 빠르게 작성할 수 있고 효율성이 좋습니다. 그리고 안전성과 관련하여 코틀린은 많은 기능을 포함하므로 발생 가능한 문제를 코드 실행이 아닌 작성 시점에서 알 수 있게 해 준다는 것을 배울 수 있습니다.
필자는 2017년까지는 안드로이드 개발을 하였으며 생명주기-인식 챕터의 내용이 매우 흥미로 웠습니다. 안드로이드 액티비티 생명주기에 따라 (onStart, onResume 등) 상태에 따라 변화되는 코드가 있는 경우 모든 경우에 대해서 리스너를 통하여 에러 처리를 추가하여 중복 코드가 생기는 경우가 있었는데 생명주기 옵서버라는 인터페이스를 사용하여 옵저버를 등록하고 앱 내에서 소유할 수 있다는 점이 신선 했습니다. (물론 RxAndroid 사용하는 방법도 있긴 하지만...)
2016~2017년 사이에는 Navigation이나 액션바를 사용하기 위해서는 Third-Library 인 sherlock을 사용했었는데 현재는 내비게이션 아키텍처 컴포넌트를 androidx에서 지원해줍니다. 기존에는 각 버전별 gradle 버전에 따라서 빌드 에러가 나거나 수동으로 패키지를 변경했어야 했는데 매우 편리 해졌습니다.
필자는 안드로이드의 꽃은 인텐트라고 생각합니다. 암시적 인텐드는 액티비티가 다른 액티비티의 서비스를 요청할 수 있는 메커니즘을 제공합니다. 이때 원하는 일을 나타내는 액션 타입과 데이터를 지정하여 데이터 전달 및 서비스 실행 등 여러 가지를 할 수 있으니 인텐트 챕터는 꼭 정독하길 바랍니다.
스레드와 AsyncTask 챕터에서는 AsyncTask가 안드로이드 11(API 레벨 30)부터 Deprecated 되었다고 합니다. AsyncTask는 기존에도 컴포넌트의 생명주기에 따라 에러 처리를 하지 않으면 메모리 릭이 발생하거나 프로그래머가 제어를 해줘야 하는 상황이 많았습니다. 단순한 앱을 개발할 때는 편리하지만 여러 컴포넌트와 핸들러를 통해 제어되는 상황에서는 골치 덩어리였습니다. 이러한 문제점은 있지만 해당 챕터에서는 AsyncTask를 사용하는 방법에 대해서 소개합니다.
AsyncTask 가 Deprecated 되어서 백그라운드 처리는 어떻게 했나 궁금했었는데 해당 챕터에서 코루틴을 소개합니다. 코틀린의 코루틴은 비동기 작업을 수행하는 더 간단하고 효율적인 방법을 제공하여 비동기 작업을 구조화된 방법으로 구현할 수 있게 해 처리할 수 있습니다. 따라서 스레드 작업과 연관된 콜백을 우리가 구현할 필요가 없으며 Job, 코루틴 범위, 코 루틴 빌더, 정지 함수, 구조호된 동시 실행, 채널 기반 통신 등의 코 루틴의 기본개념을 알 수 있습니다.
이 책은 안드로이드 스튜디오 사용법부터 시작하여 안드로이드를 개발에 필요한 컴포넌트 및 위젯 사용법을 먼저 설명합니다. 현재 최신 언어인 코틀린에 대해서도 설명을 하고 있습니다. 책의 내용의 디테일은 넓고 깊습니다. 총 900 페이지의 분량이라서 설명보다는 코드가 많이 있는 책이지 않을까 했는데 코드는 적고 코드에 대한 설명을 깊게 설명되어 있어 현업 실무자에게도 도움이 되는 책이라고 생각 듭니다.
믿고 보는 제이펍 IT 전문서 리뷰어 1기로서 출판사로부터 책을 제공받았으나,
본 리뷰는 제 주관적인 판단에 따라 작성하였습니다.
객체지향 프로그래머들이 반드시 알고 있어야 할 코딩의 정석 C++ (0) | 2021.12.27 |
---|---|
자바스크립트는 모든 곳에 존재한다 - 그래프QL, 리액트, 리액트 네이티브, 일렉트론으로 크로스플랫폼 앱 만들기 (0) | 2021.12.24 |
가볍게 떠먹는 데이터 분석 프로젝트 - 제이펍 (2) | 2021.12.15 |
Do it! 클론 코딩 트위터 노마드 코더 니꼴라스와 만드는 트위터 (0) | 2021.11.08 |
리액트를 다루는 기술 (0) | 2021.10.18 |
댓글 영역