안드로이드 프로그래밍 (4 판)
Description
아마존 안드로이드 서적 베스트셀러!
7개의 앱을 직접 따라 만들면서 배우는 실전 안드로이드 프로그래밍!
책 한 권의 과정을 다 마치면 어느새 나도 안드로이드 개발자!
이 책은 빅 너드 랜치(Big Nerd Ranch)에서 널리 활용하는 안드로이드 훈련 캠프 과정의 노하우를 기반으로 집필되었다. 이 책을 통해서 최신 안드로이드의 핵심적인 개념을 배울 수 있고, API에 관한 명쾌한 설명과 더불어 직접 애플리케이션을 작성하면서 안드로이드 프로그래밍의 기초부터 고급 기법까지 배울 수 있다. 또한 이 책은 코틀린을 사용해서 안드로이드 애플리케이션을 개발하는 데 필요한 실제적인 기법을 가르치는 것에 초점을 두었다.

안드로이드 스튜디오를 사용해서 이 책의 여러 애플리케이션을 만들어 가는 과정을 따라서 직접 코드를 작성하고 실행해 보자. 자신의 안드로이드 프로그래밍 능력이 절로 향상되는 것을 느낄 수 있을 것이다. 각 장의 내용 설명과 앱은 안드로이드 애플리케이션 개발을 시작하는 데 필요한 지식과 경험을 제공하기 위해 설계되었으며, 테스트도 모두 완료했다.

이 책의 대상 독자
? 실무와 동일하게 프로젝트를 완성하면서 안드로이드 앱 개발을 위한 프로그래밍 기법을 배우고자 하는 입문자
? 기본 안드로이드 앱 개발 지식은 있지만 실무에 적용할 수 있는 기법과 능력을 더 키우고 싶은 개발자
? 안드로이드 고급 컴포넌트나 라이브러리(예: Jetpack)를 사용한 안드로이드 앱 개발 기법을 익히고자 하는 개발자
저자

크리스틴마시캐노

빅너드랜치의수석엔지니어링매니저인동시에안드로이드개발자이자강사다.그녀는앱개발과교육을접목하는데열정을갖고있다.일을하지않을때는우쿨렐레를연주하거나아이들과함께레고를조립한다.

목차

Chapter1처음만드는안드로이드애플리케이션1
앱기본사항2
안드로이드프로젝트생성하기3
안드로이드스튜디오둘러보기6
UI레이아웃디자인하기8
레이아웃XML에서뷰객체로18
위젯을코드와연결하기21
토스트만들기25
에뮬레이터에서실행하기27
AVD에뮬레이터기능살펴보기35
궁금증해소하기:안드로이드앱빌드절차38
챌린지40
챌린지:토스트커스터마이징40
안드로이드와모델-뷰-컨트롤러41
새로운클래스만들기42
모델-뷰-컨트롤러와안드로이드44

Chapter2안드로이드와모델-뷰-컨트롤러41
새로운클래스만들기42
모델-뷰-컨트롤러와안드로이드44
뷰계층변경하기46
컨트롤러계층변경하기49
아이콘추가하기53
화면픽셀밀도57
장치에서실행하기58
챌린지:TextView에리스너추가하기60
챌린지:PREVIOUS버튼추가하기60
챌린지:Button을ImageButton으로변경하기61

Chapter3액티비티생명주기63
GeoQuiz화면회전시키기64
액티비티상태와생명주기콜백64
액티비티생명주기로깅하기67
로그메시지만들기67/LogCat사용하기70
액티비티생명주기가사용자액션에어떻게응답하는지살펴보기71
일시적으로액티비티떠나기71/액티비티끝내기74/액티비티회전시키기75
장치구성변경과액티비티생명주기76
가로방향레이아웃생성하기76
궁금증해소하기:UI변경과다중창모드80
궁금증해소하기:로그레벨81
챌린지:정답맞춘문제를건너뛰기82
챌린지:점수보여주기82

Chapter4UI상태유지하기83
ViewModel의존성추가하기83
ViewModel추가하기85
프로세스종료시에데이터보존하기95
ViewModelvsSIS101
궁금증해소하기:Jetpack,AndroidX,그리고아키텍처컴포넌트103
궁금증해소하기:섣부른해결책피하기105

Chapter5안드로이드앱의디버깅107
예외와스택기록108
안드로이드특유의디버깅117
챌린지:프로파일러살펴보기122

Chapter6두번째액티비티만들기125
두번째액티비티준비하기126
액티비티시작시키기134
액티비티간의데이터전달136
안드로이드가액티비티를어떻게알까?146
챌린지:GeoQuiz허점보완하기149
챌린지:문제마다커닝여부관리하기149

Chapter7안드로이드SDK버전과호환성151
안드로이드SDK버전151
호환성과안드로이드프로그래밍153
안드로이드개발자문서사용하기160
챌린지:장치의안드로이드버전보여주기163
챌린지:커닝횟수제한하기164

Chapter8UI프래그먼트와프래그먼트매니저165
UI유연성의필요166
프래그먼트개요167
CriminalIntent앱개발시작하기168
새로운프로젝트생성하기171
Crime데이터클래스생성하기172
UI프래그먼트생성하기173
CrimeFragment의레이아웃정의하기174/CrimeFragment클래스생성하기176
UI프래그먼트의호스팅184
컨테이너뷰정의하기185/FragmentManager에UI프래그먼트추가하기187
프래그먼트를사용하는애플리케이션아키텍처192
프래그먼트사용여부결정하기193

Chapter9RecyclerView로리스트보여주기195
새로운프래그먼트및ViewModel추가하기197
프래그먼트에사용되는ViewModel생명주기199
RecyclerView추가하기201
항목뷰레이아웃생성하기204
ViewHolder구현하기206
어댑터를구현해RecyclerView에데이터채우기209
RecyclerView의어댑터설정하기212
뷰의재활용:RecyclerView214
리스트항목의바인딩개선하기214
리스트항목선택에응답하기216
궁금증해소하기:ListView와GridView217
챌린지:RecyclerView의ViewType218

Chapter10레이아웃과위젯으로사용자인터페이스생성하기219
ConstraintLayout개요220
레이아웃편집기개요221
ConstraintLayout사용하기225
레이아웃속성을더자세히알아보기239
궁금증해소하기:마진vs패딩242
궁금증해소하기:ConstraintLayout의다른기능243
챌린지:날짜형식지정하기244

Chapter11데이터베이스와Room라이브러리245
Room아키텍처컴포넌트라이브러리246
데이터베이스생성하기247
DAO정의하기251
리포지터리패턴으로데이터베이스액세스하기253
쿼리테스트하기257
애플리케이션의스레드259
LiveData사용하기262
궁금증해소하기:싱글톤268

Chapter12프래그먼트간의이동269
단일액티비티:프래그먼트의우두머리270
프래그먼트인자276
상세내역화면에보여줄Crime객체를LiveData변환으로얻기280
데이터베이스변경하기285
궁금증해소하기:프래그먼트인자를사용하는이유는289
챌린지:효율적으로RecyclerView를다시로드하기290

Chapter13대화상자291
DialogFragment생성하기292
두프래그먼트간의데이터전달하기296
챌린지:더많은대화상자만들기303

Chapter14앱바305
AppCompat의기본앱바306
메뉴308
안드로이드애셋스튜디오사용하기316
궁금증해소하기:앱바vs액션바vs툴바320
궁금증해소하기:AppCompat앱바사용하기321
챌린지:텅빈뷰를갖는RecyclerView322

Chapter15암시적인텐트323
버튼추가하기324
모델계층에용의자추가하기326
포맷문자열사용하기328
암시적인텐트사용하기330
챌린지:또다른암시적인텐트343

Chapter16인텐트를사용한사진찍기345
사진을위한장소345
파일스토리지349
카메라인텐트사용하기354
비트맵의크기조정과보여주기358
사용하는장치기능선언하기363
챌린지:사진을확대해서보여주기363
챌린지:섬네일이미지효율적으로로드하기364

Chapter17지역화365
리소스지역화하기366
구성수식자373
대체리소스테스트하기379
궁금증해소하기:장치크기결정하기380
챌린지:날짜를지역화하기380

Chapter18접근성381
TalkBack381
텍스트가없는요소를TalkBack이읽을수있게만들기387
대등한사용자경험만들기391
궁금증해소하기:접근성검사기사용하기393
챌린지:범죄리스트접근성개선하기396

Chapter19데이터바인딩과MVVM397
다른아키텍처가왜필요할까?398
MVVM뷰모델vsJetpackViewModel398
BeatBox생성하기399
단순데이터바인딩구현하기400
애셋가져오기405
애셋사용하기407
애셋사용코드추가하기409
데이터바인딩하기412
궁금증해소하기:데이터바인딩추가로알아보기420
궁금증해소하기:LiveData와데이터바인딩423

Chapter20단위테스트와오디오재생425
SoundPool생성하기426
애셋사용하기426
음원로드하기427
음원재생하기429
테스트라이브러리의존성추가하기430
테스트클래스생성하기431
테스트설정하기433
테스트작성하기434
데이터바인딩콜백441
음원내리기442
궁금증해소하기:통합테스트444
궁금증해소하기:모의객체와테스트446
챌린지:재생속도제어하기447
챌린지:장치방향전환시에도음원재생하기447

Chapter21스타일과테마449
색상리소스450
스타일450
테마453
앱테마색상변경하기456
테마속성오버라이드하기458
버튼속성변경하기462
궁금증해소하기:테마속성사용하기466

Chapter22XMLdrawable467
균일한버튼만들기467
형태drawable469
상태리스트drawable470
레이어리스트drawable472
궁금증해소하기:XMLdrawable을사용해야하는이유474
궁금증해소하기:Mipmap이미지474
궁금증해소하기:9-패치이미지476
챌린지:버튼테마482

Chapter23인텐트와태스크483
NerdLauncher생성하기484
암시적인텐트해결하기486
런타임시에명시적인텐트생성하기492
태스크와Back스택494
NerdLauncher를홈화면으로사용하기499
궁금증해소하기:프로세스vs태스크501
궁금증해소하기:동시문서504
챌린지:앱아이콘사용하기506

Chapter24HTTP와백그라운드태스크507
PhotoGallery생성하기508
Retrofit을사용한네트워킹513
플리커에서JSON가져오기525
구성변경시의네트워크요청535
RecyclerView에응답결과보여주기539
궁금증해소하기:다른파서와데이터형식540
궁금증해소하기:요청취소하기541
챌린지:커스텀Gson역직렬화클래스구현하기542
챌린지:페이징543
챌린지:열의개수를동적으로조정하기544

Chapter25Looper,Handler,HandlerThread545
이미지를보여주기위해RecyclerView준비하기545
URL로부터이미지내려받기준비하기548
내려받기관련고려사항550
백그라운드스레드만들기551
메시지와메시지핸들러557
뷰생명주기리스닝하기570
유보프래그먼트573
궁금증해소하기:이미지내려받기문제해결하기577
궁금증해소하기:StrictMode578
챌린지:프리로딩과캐싱579

Chapter26SearchView와공유프리퍼런스581
플리커검색하기582
SearchView사용하기587
공유