Description
이 책은 안드로이드 스튜디오와 코틀린을 활용해 앱을 만드는 기초부터 시작해, 사용자 친화적인 화면 설계, 백그라운드 작업, 데이터 관리, 앱 내비게이션 등 앱 개발의 핵심 기술을 익힐 수 있도록 돕는다.
Retrofit, Glide와 같은 필수 라이브러리와 코루틴, 플로우를 사용한 비동기 처리, 의존성 주입과 아키텍처 구성 요소 등 실무에서 꼭 필요한 기술도 자세히 다룬다. 또한, 젯팩 컴포즈를 통해 효율적으로 UI를 개발하고, 앱 테스트 및 구글 플레이 스토어 배포 과정까지 실습을 통해 배우게 된다.
퀴즈 앱, 뉴스 리더, 날씨 앱 등 다양한 프로젝트를 따라 하다 보면 안드로이드 앱 개발의 전반적인 과정을 완벽히 익히고 자신만의 창의적인 앱을 만들 준비가 될 것이다.

◆ 코틀린을 사용해 유지보수가 용이하고 확장 가능한 앱 제작
◆ 안드로이드 앱 개발 생명주기 이해
◆ 구글 안드로이드 아키텍처 컴포넌트로 앱 개발 단순화
◆ 표준 라이브러리를 사용한 의존성 주입 및 데이터 파싱
◆ 리포지토리 패턴을 적용해 외부 소스에서 데이터 검색
◆ 젯팩 컴포즈를 사용한 사용자 인터페이스 구축
◆ 코루틴, 플로우 API를 사용한 안드로이드 비동기 프로그래밍
◆ 구글 플레이 스토어에 앱 출시

저자

알렉스포레스터,에란부즈나,알렉산드루덤브라반,조마르티그칼

저자:알렉스포레스터(AlexForrester)
모바일및웹개발,콘텐츠관리시스템분야에서20년이상일해온경험많은소프트웨어개발자다.2010년부터안드로이드를다뤘고,스카이(Sky),자동차협회(TheAutomobileAssociation),HSBC,디스커버리채널(DiscoveryChannel)및O2와같은대기업을대상으로다양한산업에서주요앱을개발했다.아내,딸과함께하트퍼드셔에거주하고있다.개발작업이외에는칠턴힐스에서럭비와러닝을즐긴다.

저자:에란부즈나(EranBoudjnah)
데스크톱앱,웹사이트,상호작용형놀이기구및모바일앱개발분야에서20년이상의경력을가진개발자다.2011년부터안드로이드를다뤘으며,스타트업(JustEat와PlumeDesign)부터대규모회사(Sky및HSBC)및기업군까지다양한클라이언트를위해앱을개발하고모바일팀을이끌었다.보드게임에열정적이며(수백개의컬렉션을소유하고있다)트랜스포머컬렉션을가진것을자랑스러워한다.아내인레아와함께잉글랜드의브렌트우드에거주하고있다.

저자:알렉산드루덤브라반(AlexandruDumbravan)
안드로이드앱개발분야에서10년이상의경력을가진안드로이드개발자로,2016년런던으로이사한이후주로핀테크앱에집중하고있다.여가시간에는비디오게임,영화그리고가끔씩체육관방문을즐긴다.

저자:조마르티그칼(JomarTigcal)
모바일및소프트웨어개발분야에서14년이상의경력을가진안드로이드개발자다.2012년부터소규모스타트업과대기업들을대상으로안드로이드앱개발의여러단계에참여해왔다.또한안드로이드에대한강연,교육및워크숍을진행해왔다.여가시간에는달리기와독서를즐긴다.아내셀린과함께캐나다브리티시컬럼비아주밴쿠버에거주하고있다.

역자:김윤지
삼성전자에서알람,삼성패스,VR브라우저등을개발했고,유튜브,MS전략PM을수행했다.지금은안드로이드,PM,취업에대한강의와멘토링을하고있다.IT에내딛는누군가의첫발걸음을함께하고,나아가그들과함께프로덕트를성장시켜나가는과정을즐긴다.

역자:임태규
삼성전자와쿠팡에서10년이상안드로이드기반서비스를개발했고,지금은암호화폐플랫폼플립스터를개발중이다.정보관리기술사로IT기술을통해어제와다른오늘을만드는데관심이많다.

목차


1부-안드로이드기초

01장첫번째앱만들기
__기술적요구사항
__안드로이드스튜디오를사용한안드로이드프로젝트생성
____실습1.01:앱을위한안드로이드스튜디오프로젝트생성
__가상기기설정및앱실행
____실습1.02:에뮬레이터설정및에뮬레이터에서앱실행
__안드로이드매니페스트
____실습1.03:안드로이드매니페스트인터넷권한설정
__그래들을사용한앱빌드,구성및종속성관리
____프로젝트수준의build.gradle파일
____앱수준의build.gradle파일
____실습1.04:앱에테마를적용하기위해머티리얼디자인을사용하는방법
__안드로이드앱구조
____실습1.05:커스텀인사말표시를위한대화형UI요소추가
____레이아웃파일에서뷰에접근
____추가적인입력유효성검사
____과제1.01:RGB색상을생성하는앱제작
__요약

02장사용자화면흐름생성
__기술적요구사항
__액티비티생명주기
____실습2.01:액티비티콜백로깅
__액티비티상태저장및복원
____실습2.02:레이아웃에서상태저장및복원
____실습2.03:콜백을사용해상태저장및복원
__인텐트를통한액티비티간상호작용
____실습2.04:인텐트소개
____실습2.05:액티비티에서결과받기
__인텐트,태스크및실행모드
____실습2.06:액티비티실행모드설정
____과제2.01:로그인양식만들기
__요약

03장프래그먼트를사용한UI개발
__기술적요구사항
__프래그먼트생명주기
____onAttach
____onCreate
____onCreateView
____onViewCreated
____onActivityCreated
____onStart
____onResume
____onPause
____onStop
____onDestroyView
____onDestroy
____onDetach
____실습3.01:기본프래그먼트추가및프래그먼트생명주기
____실습3.02:액티비티에정적프래그먼트추가
__정적프래그먼트와듀얼패인레이아웃
____실습3.03:정적프래그먼트를사용한듀얼패인레이아웃
__동적프래그먼트
____실습3.04:액티비티에동적프래그먼트추가
__젯팩Navigation
____실습3.05:젯팩Navigation그래프추가
____과제3.01:행성퀴즈만들기
__요약

04장앱내비게이션
__기술적요구사항
__내비게이션개요
__내비게이션드로어
____실습4.01:내비게이션드로어를포함한앱개발
__바텀내비게이션
____실습4.02:앱에바텀내비게이션추가
__탭내비게이션
____실습4.03:앱내비게이션을위한탭사용
____과제4.01:기본및보조내비게이션구성
__요약

2부-네트워크호출표시

05장필수라이브러리:Retrofit,Moshi,Glide
__기술적요구사항
__REST,API,JSON,XML소개
__네트워크엔드포인트에서데이터가져오기
____실습5.01:API에서데이터읽기
__JSON응답파싱
____실습5.02:API응답에서이미지URL추출
__원격URL에서이미지로드
____실습5.03:획득한URL에서이미지로드
____과제5.01:현재날씨표시
__요약

06장RecyclerView생성및상호작용
__기술적요구사항
__레이아웃에RecyclerView추가
____실습6.01:기본액티비티에RecyclerView추가
__RecyclerView채우기
____실습6.02:RecyclerView채우기
__RecyclerView클릭응답
____실습6.03:클릭에대한응답
__다양한아이템유형지원
____실습6.04:RecyclerView에제목추가
__스와이프를통한아이템제거
____실습6.05:스와이프삭제기능추가
__인터랙티브하게아이템추가
____실습6.06:고양이추가버튼구현
____과제6.01:목록관리
__요약

07장안드로이드권한및구글맵스
__기술적요구사항
__사용자권한요청
____실습7.01:위치권한요청
__사용자위치지도표시
____실습7.02:사용자의현재위치얻기
__지도클릭과커스텀마커
____실습7.03:클릭한위치에사용자지정마커추가
____과제7.01:자동차의주차위치를찾는앱만들기
__요약

08장서비스,WorkManager,알림
__기술적요구사항
__WorkManager를사용한백그라운드작업시작
____실습8.01:WorkManager클래스로백그라운드작업실행
__사용자가인지할수있는백그라운드작업:포어그라운드서비스
____실습8.02:포어그라운드서비스로고양이비밀요원작업현황파악
____과제8.01:물마시기알림
__요약

09장젯팩컴포즈를사용한사용자인터페이스구현
__기술적요구사항
__젯팩컴포즈란?
____실습9.1:첫컴포즈화면
__사용자액션처리
____실습9.02:사용자입력처리
__컴포즈테마설정
____실습9.03:테마적용
____기존프로젝트에컴포즈적용
____과제9.01:첫컴포즈앱
__요약

3부-테스트및코드구조

10장JUnit,Mockito,Espresso를사용한단위테스트와통합테스트
__기술적요구사항
__테스트유형
__JUnit
__안드로이드스튜디오테스팅팁
__Mockito
____실습10.01:숫자의합테스트
__통합테스트
____Robolectric
____Espresso
____실습10.02:이중통합
__UI테스트
____젯팩컴포즈테스트
____실습10.03:랜덤대기시간
__TDD
____실습10.04:TDD를사용한숫자합계산
____과제10.01:TDD로개발하기
__요약

11장안드로이드아키텍처구성요소
__기술적요구사항
__안드로이드컴포넌트개요
__ViewModel
____실습11.1:공유ViewModel
__데이터스트림
____LiveData
____실습11.02:라이브데이터로관찰
____추가데이터스트림
__룸
____엔티티
____DAO
____데이터베이스설정
____서드파티프레임워크
____실습11.03:간단한룸데이터베이스만들기
____과제11.01:쇼핑메모앱
__요약

12장데이터저장
__기술적요구사항
__프리퍼런스와데이터스토어
____SharedPreferences
____실습12.01:SharedPreferences래핑
____DataStore
____실습12.02:프리퍼런스DataStore
__파일
____내부저장소
____외부저장소
____FileProvider
____저장소액세스프레임워크(SAF)
____에셋파일
____실습12.03:파일복사
__범위지정저장소
____카메라,미디어저장소
____실습12.04:사진촬영
____과제12.01:강아지다운로더
__요약

13장Dagger,Hilt,Koin을사용한의존성주입
__기술적요구사항
__의존성주입의필요성
__수동DI
____실습13.01:수동주입
__Dagger2
____컨슈머
____프로바이더
____커넥터
____한정자
____스코프
____서브컴포넌트
____실습13.02:Dagger주입
__Hilt
____실습13.03:Hilt주입
__Koin
____실습13.04:Koin주입
____과제13.01:주입된리포지토리
__요약

4부-앱다듬고배포하기

14장코루틴및플로우
__기술적요구사항
__안드로이드에서코루틴사용
____코루틴생성
____프로젝트에코루틴추가
____실습14.01:안드로이드앱에서코루틴사용
__LiveData변환
____실습14.02:LiveData변환
__안드로이드에서플로우사용
____안드로이드에서플로우수집
____플로우빌더로플로우생성
____플로우와연산자사용
____실습14.03:안드로이드앱에서플로우사용
____과제14.01:TV가이드앱만들기
__요약

15장아키텍처패턴
__기술적요구사항
__MVVM으로시작하기
____안드로이드에서데이터바인딩사용
____실습15.01:안드로이드프로젝트에서데이터바인딩사용
__Retrofit과Moshi사용
____리포지토리패턴구현
____실습15.02:안드로이드프로젝트에서룸과함께리포지토리사용
__WorkManager사용
____실습15.03:안드로이드프로젝트에WorkManager추가
____과제15.01:TV가이드앱업데이트
__요약

16장CoordinatorLayout과MotionLayout을사용한애니메이션및전환
__기술적요구사항
__액티비티전환
____XML로액티비티전환추가
____코드로액티비티전환추가
____액티비티전환을적용한액티비티실행
____실습16.01:액티비티전환생성
____공유요소전환추가
____공유요소전환을적용한액티비티실행
____실습16.02:구성요소전환생성
__CoordinatorLayout을사용한애니메이션
__MotionLayout을사용한애니메이션
____MotionLayout추가
____MotionLayout으로애니메이션생성
____실습16.03:MotionLayout으로애니메이션추가
____모션에디터
____MotionLayout디버깅
____MotionLayout경로수정
____실습16.04:키프레임을사용한애니메이션경로수정
____과제16.01:비밀

출판사 서평

이책의대상독자

코틀린을사용해자신만의앱을개발하고싶지만어떻게시작해야할지확신이없다면이책이도움이될것이다.코틀린프로그래밍언어에대한기본적인이해만있다면이책에서다루는주제를더빠르게이해하는데도움이된다.

이책의구성

1장,‘첫번째앱만들기’에서는안드로이드스튜디오를사용해첫번째안드로이드앱을만드는방법을보여준다.여기에서는안드로이드스튜디오프로젝트를생성하고그구성요소를이해하며,가상기기에서앱을빌드하고배포하는데필요한도구를알아본다.또한안드로이드앱의구조를살펴본다.
2장,‘사용자화면흐름생성’에서는안드로이드생태계와안드로이드앱의구성요소를자세히다룬다.액티비티(Activity)와액티비티의생명주기(Lifecycle),인텐트(Intent),태스크(Task)와같은개념을소개하고,상태복원과화면간또는액티비티간데이터전달도다룬다.
3장,‘프래그먼트를사용한UI개발’에서는사용자인터페이스를위한기본적인프래그먼트사용방법을알아본다.프래그먼트를여러방법으로사용해폰과태블릿용앱의레이아웃을구성하는방법을알아본다.또한젯팩Navigation컴포넌트를사용하는방법도알아본다.
4장,‘앱내비게이션’에서는앱의다양한내비게이션유형을다룬다.슬라이딩레이아웃을사용한내비게이션드로어(NavigationDrawer),바텀내비게이션(BottomNavigation),탭내비게이션(TabbedNavigation)을살펴본다.
5장,‘필수라이브러리:Retrofit,Moshi,Glide’에서는Retrofit라이브러리와Moshi라이브러리를사용해원격데이터소스에서데이터를가져와코틀린객체로변환하는방법을알아본다.또한앱에원격이미지를로드하는Glide라이브러리도알아본다.
6장,‘RecyclerView생성및상호작용’에서는목록을만들고RecyclerView위젯을사용해표시하는방법을알아본다.
7장,‘안드로이드권한및구글맵스’에서는권한의개념을알아보고앱이특정작업을실행하기위해사용자로부터권한을요청하는방법을소개하며,MapsAPI도알아본다.
8장,‘서비스,WorkManager,알림’에서는안드로이드앱에서백그라운드작업의개념과앱이사용자에게보이지않는상태로특정작업을실행하는방법을자세히살펴보며,해당작업에대한알림을표시하는방법을알아본다.
9장,‘젯팩컴포즈를사용한사용자인터페이스구현’에서는젯팩컴포즈의작동방식,스타일과테마의적용방법,레이아웃파일을사용하도록생성된프로젝트에서젯팩컴포즈를사용하는방법을알아본다.
10장,‘JUnit,Mockito,Espresso를사용한단위테스트와통합테스트’에서는안드로이드앱의다양한테스트,각테스트유형별로사용되는프레임워크,테스트주도개발(TDD,Test-DrivenDevelopment)의개념을알아본다.
11장,‘안드로이드아키텍처컴포넌트’에서는안드로이드젯팩라이브러리에서제공하는컴포넌트들을자세히알아본다.이는ViewModel과같은컴포넌트를사용해비즈니스로직을UI코드와분리하는데도움을준다.또한LiveData와같이구독가능한데이터스트림을사용해데이터를UI에전달하는방법을알아본다.마지막으로룸(Room)라이브러리를살펴보며데이터를영속적으로저장하는방법을분석한다.
12장,‘데이터저장’에서는SharedPreferences에서파일까지장치에데이터를저장하는다양한방법을알아본다.또한리포지토리(Repository)개념을소개해앱의특정구현을다른계층으로구조화하는방법의아이디어를제공한다.
13장,‘Dagger,Hilt,Koin을사용한의존성주입’에서는의존성주입의개념과의존성주입이앱에제공하는이점을알아본다.의존성관리에도움이되는Dagger,Hilt및Koin과같은프레임워크를소개한다.
14장,‘코루틴및플로우’에서는코루틴과플로우를사용해백그라운드작업과데이터조작을수행하는방법을소개한다.플로우의다양한연산자와LiveData변환을사용해데이터를조작하고표시하는방법도알아본다.
15장,‘아키텍처패턴’에서는안드로이드프로젝트를구조화하기위해사용할수있는아키텍처패턴을설명한다.이패턴은여러구성요소로프로젝트를분리해각각의기능을명확하게나누는데도움이된다.이를통해코드를개발,테스트,유지관리하기쉽게만들수있다.
16장,‘CoordinatorLayout과MotionLayout을사용한애니메이션및전환’에서는CoordinatorLayout과MotionLayout을사용해애니메이션과뷰전환으로더나은앱을만드는방법을알아본다.
17장,‘구글플레이에앱출시하기’에서는앱을구글플레이에출시하는방법을알아보며이책을마무리한다.출시준비부터구글플레이개발자계정생성,마지막으로앱을출시하는과정을다룬다.

지은이의말

지난10년동안안드로이드는앱시장을지배해왔으며개발자들은점점더자신만의안드로이드앱을만들기위해노력하고있다.이책은안드로이드개발의기초부터시작해안드로이드앱개발을위한코틀린프로그래밍언어와안드로이드용통합개발환경(IDE,IntegratedDevelopmentEnvironment)인안드로이드스튜디오(AndroidStudio)의사용법을알려준다.
그런다음실습을통해앱을만들고가상기기에서앱을실행하는방법을살펴본다.앱구조화부터액티비티,프래그먼트,다양한내비게이션패턴을사용해사용자인터페이스(UI,UserInterface)를구축하는안드로이드개발기초를다룬다.각장을진행할수록안드로이드의RecyclerView를사용해데이터목록을효율적으로표시하고웹서비스에서데이터를가져오고이미지를처리하는데익숙해질것이다.
또한매핑,위치서비스,권한모델에대해알아보고,알림과데이터영속화방법에대해알아본다.그후젯팩컴포즈(JetpackCompose)를사용해사용자인터페이스를구축한다.그다음으로테스트를다루면서테스트피라미드전반에대해이해하게될것이다.안드로이드아키텍처구성요소(AAC,AndroidArchitectureComponents)를사용해코드를깔끔하게구조화하는방법도알아보고,다양한아키텍처패턴과의존성주입의장점도알아본다.
비동기프로그래밍을위해코루틴(Coroutine)과플로우(FlowAPI)를다룬다.그후에는다시UI에초점을맞춰사용자가앱과상호작용할때의움직임과전환효과를추가하는방법을알아본다.마지막으로인기있는영화를검색하고보여주는재밌는앱을만들고,구글플레이에앱을출시하는방법을알아본다.
이책을마치면코틀린을사용해완전한기능을갖춘안드로이드앱을만드는데필요한기술과자신감을갖게될것이다.

옮긴이의말

안드로이드는오늘날가장널리사용되는모바일플랫폼중하나로,그영향력은스마트폰을넘어다양한기기로확장되고있다.빠르게변화하는기술트렌드와복잡한생태계는개발자들에게새로운도전과제를끊임없이던져준다.이러한상황에서,실무에바로적용가능한최신개발기법과기술을다룬양질의자료를만나는것은매우중요한일이다.
이책은안드로이드개발의최신흐름을따라가며,개발자가실무에서꼭알아야할핵심기술들을명확하고체계적으로설명하고있다.젯팩컴포즈(JetpackCompose),안드로이드아키텍처구성요소,코루틴과플로우를비롯해최신기술과다양한아키텍처패턴을다루며,안드로이드개발환경전반을폭넓게탐구할수있도록구성돼있다.
이책을번역하며감명받았던점은,단순히기술을나열하는것이아니라독자가실제로작동하는앱을만들고이를완성해가는과정을하나하나안내한다는점이었다.특히플레이스토어에앱을배포하는과정을포함해개발의시작부터끝까지실무전반을아우르는종합적인내용을제공한다는점이인상적이었다.실제로이책을따라가다보면단순히동작하는앱을만드는것을넘어유지보수와확장이용이한실무수준의애플리케이션을개발할수있는자신감을얻게될것이다.
번역과정에서특히중점을둔부분은,독자여러분이한국어로된내용을통해원활히학습하고실습할수있도록최신기술용어와코드를현지화하면서도원작자가전달하고자했던의도와맥락을온전히살리는것이었다.뿐만아니라번역과정에서최신안드로이드버전에맞춰코드를업데이트해독자가최신환경에서도어려움없이학습하고실습할수있도록배려했다.새로운버전에맞춘코드와번역이실무환경에서도효과적으로적용되기바란다.부족한부분이있다면너그럽게이해해주길부탁드리며,이책이여러분의개발여정에훌륭한동반자가되길진심으로바란다.