
코틀린으로 배우는 안드로이드 앱 개발 실전 노하우 2/e [실용적이고 창의적인 앱을 위한]
- 원서명How to Build Android Apps with Kotlin - Second Edition: A practical guide to developing, testing, and publishing your first Android apps (ISBN 9781837634934)
- 지은이알렉스 포레스터(Alex Forrester), 에란 부즈나(Eran Boudjnah), 알렉산드루 덤브라반(Alexandru Dumbravan), 조마르 티그칼(Jomar Tigcal)
- 옮긴이김윤지, 임태규
- ISBN : 9791161759630
- 45,000원
- 2025년 02월 20일 펴냄
- 페이퍼백 | 884쪽 | 188*235mm
- 시리즈 : 모바일 프로그래밍
책 소개
요약
이 책은 안드로이드 스튜디오와 코틀린을 활용해 앱을 만드는 기초부터 시작해, 사용자 친화적인 화면 설계, 백그라운드 작업, 데이터 관리, 앱 내비게이션 등 앱 개발의 핵심 기술을 익힐 수 있도록 돕는다.
Retrofit, Glide와 같은 필수 라이브러리와 코루틴, 플로우를 사용한 비동기 처리, 의존성 주입과 아키텍처 구성 요소 등 실무에서 꼭 필요한 기술도 자세히 다룬다. 또한, 젯팩 컴포즈를 통해 효율적으로 UI를 개발하고, 앱 테스트 및 구글 플레이 스토어 배포 과정까지 실습을 통해 배우게 된다.
퀴즈 앱, 뉴스 리더, 날씨 앱 등 다양한 프로젝트를 따라 하다 보면 안드로이드 앱 개발의 전반적인 과정을 완벽히 익히고 자신만의 창의적인 앱을 만들 준비가 될 것이다.
이 책에서 다루는 내용
◆ 코틀린을 사용해 유지보수가 용이하고 확장 가능한 앱 제작
◆ 안드로이드 앱 개발 생명주기 이해
◆ 구글 안드로이드 아키텍처 컴포넌트로 앱 개발 단순화
◆ 표준 라이브러리를 사용한 의존성 주입 및 데이터 파싱
◆ 리포지토리 패턴을 적용해 외부 소스에서 데이터 검색
◆ 젯팩 컴포즈를 사용한 사용자 인터페이스 구축
◆ 코루틴, 플로우 API를 사용한 안드로이드 비동기 프로그래밍
◆ 구글 플레이 스토어에 앱 출시
이 책의 대상 독자
코틀린을 사용해 자신만의 앱을 개발하고 싶지만 어떻게 시작해야 할지 확신이 없다면 이 책이 도움이 될 것이다. 코틀린 프로그래밍 언어에 대한 기본적인 이해만 있다면 이 책에서 다루는 주제를 더 빠르게 이해하는 데 도움이 된다.
이 책의 구성
1장, ‘첫 번째 앱 만들기’에서는 안드로이드 스튜디오를 사용해 첫 번째 안드로이드 앱을 만드는 방법을 보여준다. 여기에서는 안드로이드 스튜디오 프로젝트를 생성하고 그 구성 요소를 이해하며, 가상 기기에서 앱을 빌드하고 배포하는 데 필요한 도구를 알아본다. 또한 안드로이드 앱의 구조를 살펴본다.
2장, ‘사용자 화면 흐름 생성’에서는 안드로이드 생태계와 안드로이드 앱의 구성 요소를 자세히 다룬다. 액티비티(Activity)와 액티비티의 생명주기(Lifecycle), 인텐트(Intent), 태스크(Task)와 같은 개념을 소개하고, 상태 복원과 화면 간 또는 액티비티 간 데이터 전달도 다룬다.
3장, ‘프래그먼트를 사용한 UI 개발’에서는 사용자 인터페이스를 위한 기본적인 프래그먼트 사용 방법을 알아본다. 프래그먼트를 여러 방법으로 사용해 폰과 태블릿용 앱의 레이아웃을 구성하는 방법을 알아본다. 또한 젯팩 Navigation 컴포넌트를 사용하는 방법도 알아본다.
4장, ‘앱 내비게이션’에서는 앱의 다양한 내비게이션 유형을 다룬다. 슬라이딩 레이아웃을 사용한 내비게이션 드로어(Navigation Drawer), 바텀 내비게이션(Bottom Navigation), 탭 내비게이션(Tabbed Navigation)을 살펴본다.
5장, ‘필수 라이브러리: Retrofit, Moshi, Glide’에서는 Retrofit 라이브러리와 Moshi 라이브러리를 사용해 원격 데이터 소스에서 데이터를 가져와 코틀린 객체로 변환하는 방법을 알아본다. 또한 앱에 원격 이미지를 로드하는 Glide 라이브러리도 알아본다.
6장, ‘RecyclerView 생성 및 상호작용’에서는 목록을 만들고 RecyclerView 위젯을 사용해 표시하는 방법을 알아본다.
7장, ‘안드로이드 권한 및 구글 맵스’에서는 권한의 개념을 알아보고 앱이 특정 작업을 실행하기 위해 사용자로부터 권한을 요청하는 방법을 소개하며, Maps API도 알아본다.
8장, ‘서비스, WorkManager, 알림’에서는 안드로이드 앱에서 백그라운드 작업의 개념과 앱이 사용자에게 보이지 않는 상태로 특정 작업을 실행하는 방법을 자세히 살펴보며, 해당 작업에 대한 알림을 표시하는 방법을 알아본다.
9장, ‘젯팩 컴포즈를 사용한 사용자 인터페이스 구현’에서는 젯팩 컴포즈의 작동 방식, 스타일과 테마의 적용 방법, 레이아웃 파일을 사용하도록 생성된 프로젝트에서 젯팩 컴포즈를 사용하는 방법을 알아본다.
10장, ‘JUnit, Mockito, Espresso를 사용한 단위 테스트와 통합 테스트’에서는 안드로이드 앱의 다양한 테스트, 각 테스트 유형별로 사용되는 프레임워크, 테스트 주도 개발(TDD, Test-Driven Development)의 개념을 알아본다.
11장, ‘안드로이드 아키텍처 컴포넌트’에서는 안드로이드 젯팩 라이브러리에서 제공하는 컴포넌트들을 자세히 알아본다. 이는 ViewModel과 같은 컴포넌트를 사용해 비즈니스 로직을 UI 코드와 분리하는 데 도움을 준다. 또한 LiveData와 같이 구독 가능한 데이터 스트림을 사용해 데이터를 UI에 전달하는 방법을 알아본다. 마지막으로 룸(Room) 라이브러리를 살펴보며 데이터를 영속적으로 저장하는 방법을 분석한다.
12장, ‘데이터 저장’에서는 SharedPreferences에서 파일까지 장치에 데이터를 저장하는 다양한 방법을 알아본다. 또한 리포지토리(Repository) 개념을 소개해 앱의 특정 구현을 다른 계층으로 구조화하는 방법의 아이디어를 제공한다.
13장, ‘Dagger, Hilt, Koin을 사용한 의존성 주입’에서는 의존성 주입의 개념과 의존성 주입이 앱에 제공하는 이점을 알아본다. 의존성 관리에 도움이 되는 Dagger, Hilt 및 Koin과 같은 프레임워크를 소개한다.
14장, ‘코루틴 및 플로우’에서는 코루틴과 플로우를 사용해 백그라운드 작업과 데이터 조작을 수행하는 방법을 소개한다. 플로우의 다양한 연산자와 LiveData 변환을 사용해 데이터를 조작하고 표시하는 방법도 알아본다.
15장, ‘아키텍처 패턴’에서는 안드로이드 프로젝트를 구조화하기 위해 사용할 수 있는 아키텍처 패턴을 설명한다. 이 패턴은 여러 구성 요소로 프로젝트를 분리해 각각의 기능을 명확하게 나누는 데 도움이 된다. 이를 통해 코드를 개발, 테스트, 유지 관리하기 쉽게 만들 수 있다.
16장, ‘CoordinatorLayout과 MotionLayout을 사용한 애니메이션 및 전환’에서는 Coordinator Layout과 MotionLayout을 사용해 애니메이션과 뷰 전환으로 더 나은 앱을 만드는 방법을 알아본다.
17장, ‘구글 플레이에 앱 출시하기’에서는 앱을 구글 플레이에 출시하는 방법을 알아보며 이 책을 마무리한다. 출시 준비부터 구글 플레이 개발자 계정 생성, 마지막으로 앱을 출시하는 과정을 다룬다.
목차
목차
- 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: 수동 주입
- Dagger 2
- 컨슈머
- 프로바이더
- 커넥터
- 한정자
- 스코프
- 서브컴포넌트
- 실습 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: 비밀번호 생성기
- 요약
- 17장 구글 플레이에 앱 출시하기
- 출시를 위한 앱 준비
- 앱 버저닝
- 키스토어 생성
- 실습 17.01: 안드로이드 스튜디오에서 키스토어 생성
- 키스토어와 비밀번호 저장
- 릴리스용 앱 서명
- 실습 17.02: 서명된 APK 생성
- 안드로이드 앱 번들
- 실습 17.03: 서명된 앱 번들 생성
- 구글 플레이 앱 서명
- 개발자 계정 생성
- 구글 플레이에 앱 업로드
- 스토어 등록 정보 생성
- 출시 준비
- 배포
- 앱 출시 관리
- 릴리스 트랙
- 단계적 출시
- 관리 게시
- 과제 17.01: 앱 게시
- 요약
- 출시를 위한 앱 준비