안드로이드 개발 레벨업 교과서

현업 최고의 안드로이드 개발자가 알려 주는

현업 최고의 엔지니어가 알려주는 안드로이드 기술 핵심 정리!

이 책은 안드로이드 프로그래밍을 어느 정도 할 수 있게 됐지만 한걸음 더 나아가고 싶어 하는 독자들을 위한 책이다. 만들고 싶은 앱은 대충 만들 수 있지만 더 효율적인 개발 방법과 가독성 높은 설계를 하고자 할 때 참고할 수 있도록 구성하였다.

저자들은 일본 야후에서 근무하는 현업 최고의 엔지니어와 디자이너들이며, 안드로이드 스튜디오의 활용부터 소프트웨어 테스트, 팀 개발, 보안, 성능 향상, 제품 디자인, 광고, 출시 후 앱 개선까지 현장의 최전선에서 실제로 사용되고 있는 일련의 기술들을 체계적으로 설명한다.

쯔쯔이 슌스케

야후 주식회사, 퍼스널 서비스 컴퍼니 앱개발부 부장. 2005년 야후에 입사. 2009년부터 안드로이드 앱 개발을 진행, ‘야후오크!’, ‘Yahoo! 브라우저’, ‘Yahoo! 간단 사진정리’ 등 다수의 앱 개발에 참여했다. 2013년 야후 인증제도인 안드로이드 앱의 ‘검은띠’ 인증 강사로서 사내 엔지니어 기술력 강화에 힘쓴다. 이 책에서 02~03장, 13~14장 및 전체 감수를 담당했다.

사토야마 나미토

야후 주식회사, 퍼스널 서비스 컴퍼니 앱 추진 본부 앱 개발 추진부. 사이버 에이전트와 DeNA 등에서 앱 개발 경험을 쌓아 2014년 야후에 입사. ‘Yahoo! 브라우저’를 비롯한 유틸리티 계통 앱의 관리와 기술추진업무에 종사했다. 개인적으로는 안드로이드 앱 개발자 커뮤니티인 ‘Shibuya.apk’를 운영한다. 이 책에서 12, 15, 16, 18, 19장을 담당했다.

마츠다 쇼이치

야후 주식회사, CTO실 SWAT. 대학에서 소프트웨어 설계와 개발을 전공했다. 2012년에 야후에 신입으로 입사. 2013년부터 안드로이드 개발과 iOS 개발을 했고, 주로 ‘Yahoo! 스마트폰 최적화 도구’의 개발 업무와 매지니먼트 업무에 종사했다. 현재는 회사 전반의 개발에 관한 과제 해결 업무를 하는 한편, 사내 안드로이드 라이트닝 토크를 주재한다. 서비스의 울타리를 넘어 지식 공유와 엔지니어의 관계 강화에 노력한다. 이 책에서 07, 08, 09, 17장을 담당했다.

사사키도 히로키

야후 주식회사, 퍼스널 서비스 컴퍼니 메일 본부 디자인부 리더. 2008년 야후에 입사. 웹사이트 설계나 코딩을 주로 하면서 디자인 업무까지 폭넓게 담당한다. 'Yahoo! 환승 안내'에 포함된 '통근 타이머'와 'Yahoo! 메일' 등 다수의 앱 설계 업무를 수행했다. 현재는 사내에서 정성조사와 설문조사를 이용한 UX 리서치를 추진하고 있다. 이 책에서 10, 11, 12장을 담당했다.

멘쥬 타카히로

야후 주식회사, 미디어 컴퍼니 앱 추진 본부 앱 개발 추진부. 대학에서 정보 공학을 전공했다. 스마트폰 앱 개발 기법에 관해 연구한다. 2013년 야후에 신입으로 입사. 주로 'Yahoo! 스마트폰 최적화 도구'나 'Yahoo! 브라우저' 개발 업무에 종사. 오픈소스인 안드로이드 라이브러리와 안드로이드 스튜디오 플러그인을 개발하고, 회사 내외부의 라이트닝 토크에 자주 참가하는 등 기술적인 계몽 활동을 활발히 하고 있다. 이 책에서는 01, 04, 05, 06장을 담당했다.

김성훈

첫 직장에서 과외 업무로 두꺼운 매뉴얼을 1년에 걸쳐 번역한 것을 시작으로, 지금은 IT 서적을 주로 번역하는 전문 번역가로 활동 중이다. 번역서로는 『C가 보이는 그림책』 『프로그램이 보이는 그림책』 등의 그림책 시리즈, 『게임 프로그래밍의 정석』 『Objective-C 프로그래밍』 『구글을 지탱하는 기술』 『소프트웨어 설계 테크닉』 『UML 모델링의 본질』 등이 있다.

  • ▣ 01장: 안드로이드 스튜디오의 편리한 기능을 활용해 효율적으로 개발한다
    • 1.1 안드로이드 스튜디오를 사용해보자
      • 1.1.1 안드로이드 스튜디오와 그 특징을 이해하자
      • 1.1.2 새 프로젝트를 만들자
      • 1.1.3 실제 디바이스에서 동작시켜 보자
      • 1.1.4 안드로이드 스튜디오의 폴더 구성을 살펴보자
    • 1.2 개발을 빠르게 하는 기능을 활용하자
      • 1.2.1 안드로이드 스튜디오로 실용적인 개발 환경을 구축하자
      • 1.2.2 단축키를 이용해 코드를 빠르게 입력하자
      • 1.2.3 편리한 플러그인을 철저히 활용하자
      • 1.2.4 편리한 디버그 기능을 활용하자
    • 1.3 안드로이드 스튜디오 2.0의 새로운 개발 환경
      • 1.3.1 인스턴트 런
      • 1.3.2 새로운 에뮬레이터를 시험해보자
    • 1.4 정리
    •  
  • ▣ 02장: 각 컴포넌트를 복습한다(1): 액티비티와 프래그먼트 기초
    • 2.1 액티비티를 이해하자
      • 2.1.1 액티비티란?
      • 2.1.2 액티비티의 수명주기를 이해하자
      • 2.1.3 액티비티의 백스택을 이해하자
    • 2.2 뷰와 레이아웃을 이해하자
      • 2.2.1 뷰를 이해하자
      • 2.2.2 레이아웃을 이해하자
      • 2.2.3 커스텀 뷰를 만들자
    • 2.3 프래그먼트로 UI를 가진 컴포넌트를 통합하자
      • 2.3.1 프래그먼트를 이해하자
      • 2.3.2 프래그먼트 수명주기를 이해하자
      • 2.3.3 프래먼트를 동적으로 추가·삭제하자
      • 2.3.4 중첩 프래그먼트를 이용하자
      • 2.3.5 UI를 갖지 않는 프래그먼트를 이용하자
    • 2.4 정리
    •  
  • ▣ 03장: 각 컴포넌트를 복습한다(2): ContentProvider, Service, BroadcastReceiver 기초
    • 3.1 ContentProvider로 데이터 읽기 쓰기를 구현해보자
      • 3.1.1 ContentProvider로부터 데이터를 읽어오자
      • 3.1.2 ContentProvider를 만들자
    • 3.2 BroadcastReceiver로 브로드캐스트 이벤트를 수신하자
      • 3.2.1 BroadcastReceiver의 기본을 이해하자
      • 3.2.2 LocalBroadcastReceiver를 이해하자
      • 3.2.3 브로드캐스트를 수신해 처리할 때 주의할 점을 알아보자
    • 3.3 Service로 백그라운드 처리를 구현하자
      • 3.3.1 Service의 종류와 수명주기를 이해하자
      • 3.3.2 상주 서비스를 만들자
      • 3.3.3 IntentService를 활용하자
    •  
  • ▣ 04장: 개발에 도움을 주는 지원 라이브러리 활용법: RecyclerView, CardView, Pallete 활용
    • 4.1 지원 라이브러리로 호환성을 유지하면서 개발을 진행합시다
      • 4.1.1 지원 라이브러리의 기본을 이해하자
      • 4.1.2 지원 라이브러리 종류와 특징을 이해하자
    • 4.2 지원 라이브러리 예제를 실행한다
      • 4.2.1 사용자에게 통지하는 NotificationCompat을 이해하자
    • 4.3 리스트를 표시하는 RecyclerView 위젯을 이용해보자
      • 4.3.1 RecyclerView의 특징을 이해하자
      • 4.3.2 RecyclerView로 리스트를 표시하자
      • 4.3.3 RecyclerView를 커스터마징하자
    • 4.4 정리
    •  
  • ▣ 05장: 변경에 강하게 설계한다: MVVM 설계 기법의 이해와 라이브러리 활용
    • 5.1 다양한 설계 기법을 이해하자
      • 5.1.1 MVP를 이해하자
      • 5.1.2 MVVM을 이해하자
    • 5.2 액티비티 클래스에 플랫하게 구현해보자
      • 5.2.1 어떤 앱을 만들지 생각하자
      • 5.2.2 앱에 사용할 화면과 기능을 이해하자
      • 5.2.3 구현 방법을 확인하자
      • 5.2.4 패키지 구분법을 확인하자
      • 5.2.5 리포지토리 화면을 이해하자
      • 5.2.6 고찰과 깨달음
    • 5.3 MVP를 사용하자
      • 5.3.1 패키지가 나뉜 것을 확인하자
      • 5.3.2 MVP로 안드로이드 프로젝트를 구현하자
      • 5.3.3 고찰과 깨달음
    • 5.4 MVVM을 사용하자
      • 5.4.1 데이터 바인딩을 사용해보자
      • 5.4.2 데이터 바인딩으로 MVVM을 사용해보자
      • 5.4.3 패키지 구조를 확인하자
      • 5.4.4 리포지토리 화면을 이해하자
      • 5.4.5 고찰과 깨달음
    • 5.5 정리
    •  
  • ▣ 06장: 빌드 시스템을 이해하고 커스터마이징한다: 그레이들의 이해
    • 6.1 그레이들의 기본을 이해하자
      • 6.1.1 그레이들의 특징을 파악하자
      • 6.1.2 Android Gradle 플러그인 특징을 이해하자
      • 6.1.3 안드로이드의 빌드 파일을 살펴보자
      • 6.1.4 모듈의 build.gradle을 이해하자
      • 6.1.5 그레이들의 태스크를 이해하자
    • 6.2 안드로이드 그레이들 플러그인을 활용해 개발 효율을 높이자
      • 6.2.1 안드로이드 그레이들 플러그인의 설정을 이해하자
      • 6.2.2 상황에 맞게 프로젝트를 커스터마이징하자
      • 6.2.3 빌드 변형을 이해하자
    • 6.3 커맨드라인으로 실행하자
      • 6.3.1 커맨드라인에서 실행하는 장점
      • 6.3.2 빌드
      • 6.3.3 응용 조작을 마스터하자
    • 6.4 정리
    •  
  • ▣ 07장: 단위 테스트를 이해하자: 단위 테스트 작성
    • 7.1 테스트의 의의와 종류를 이해하자
      • 7.1.1 테스트를 이해하자
      • 7.1.2 테스트의 종류를 정리하고 이해하자
    • 7.2 단위 테스트를 작성해 보자
      • 7.2.1 단위 테스트의 사전준비를 하자
      • 7.2.2 테스트를 구현하자
    • 7.3 테스트 도입 전략을 세우자
      • 7.3.1 테스트 도입을 향한 첫걸음
      • 7.3.2 메서드가 지나치게 길지만 테스트는 작성하고 싶다
      • 7.3.3 리팩터링 기능 활용
    • 7.4 정리
    •  
  • ▣ 08장: UI 테스트를 이해하고 실천한다: UI 테스트 작성
    • 8.1 UI 테스트를 이해하자
      • 8.1.1 단위 테스트와의 차이를 이해하자
      • 8.1.2 UI 테스트의 실제
    • 8.2 UI 테스트를 구현하자
      • 8.2.1 UI 테스트 프레임워크 에스프레소를 활용하자
      • 8.2.2 에스프레소 사용 환경을 준비하자
      • 8.2.3 에스프레소를 이해하자
    • 8.3 테스트를 더 깊이 이해하고 활용하자
      • 8.3.1 다른 앱과의 연계와 홈 화면에서의 동작을 테스트하자
      • 8.3.2 테스트 운영 방침을 정하자
    • 8.4 정리
    •  
  • ▣ 09장: 자동화로 매우 빠른 개발 환경을 만든다: CI 기초
    • 9.1 CI의 의미를 이해하자
      • 9.1.1 CI의 기초를 이해하자
      • 9.1.2 CI로 해야 할 일과 시점을 이해하자
      • 9.1.3 CI의 하루를 생각해 보자
    • 9.2 안드로이드 앱 개발에 CI를 도입하자
      • 9.2.1 Jenkins와 Circle CI를 이해하자
      • 9.2.2 Jenkins를 동작시키자
      • 9.2.3 빌드를 자동화하자
      • 9.2.4 테스트를 자동화하자
      • 9.2.5 인스펙션을 자동화하자
      • 9.2.6 디플로이를 자동화하자
      • 9.2.7 Circle CI의 기본을 이해하자
    • 9.3 정리
    •  
  • ▣ 10장: 디자인을 이해하고 사용하기 쉬운 앱을 만든다: 엔지니어도 알 수 있는 디자인의 기초
    • 10.1 디자인의 기본을 이해하자
      • 10.1.1 ‘색’과 ‘폰트’를 이해하자
      • 10.1.2 콘텐츠를 위한 레이아웃을 이해하자
      • 10.1.3 사진 사용법에 주의하자
    • 10.2 디자인 진행 방법을 전략적으로 생각하자
      • 10.2.1 디자인의 경쟁자 조사를 하자
      • 10.2.2 콘셉트 테스트를 실시하자
    • 10.3 앱 제작을 성공으로 이끌자
      • 10.3.1 행동과 목표를 명확히 하자
      • 10.3.2 3단계 프로토타이핑을 알자
    • 10.4 정리
    •  
  • ▣ 11장: 머티리얼 디자인을 이해한다: 머티리얼 디자인 가이드라인의 이해
    • 11.1 머티리얼 디자인을 파악하자
      • 11.1.1 지금까지의 소프트웨어 UI와의 차이를 이해하자
      • 11.1.2 머티리얼 디자인을 활용하자
    • 11.2 대표적인 컴포넌트를 이해하자
      • 11.2.1 리스트와 그리드 리스트, 카드의 특징을 이해하자
      • 11.2.2 버튼과 피드백을 이해하자
      • 11.2.3 인터랙션을 분석하자
    • 11.3 정리
    •  
  • ▣ 12장: 머티리얼 디자인을 구현한다: 안드로이드 디자인 지원 라이브러리의 활용
    • 12.1 적용할 준비를 하자
      • 12.1.1 OS 버전별로 이용할 머티리얼 디자인의 요소를 결정하자
      • 12.1.2 머티리얼 디자인 테마를 적용하자
    • 12.2 부분 적용할 수 있는 디자인 요소를 이해하자
      • 12.2.1 리플 이펙트(물결 효과)를 구현하자
      • 12.2.2 Elevation과 Shadow를 이해하자
      • 12.2.3 컬러 팔레트를 정의하자
    • 12.3 머티리얼 디자인의 UI 요소를 구현하자
      • 12.3.1 Android Design Support Library를 도입하자
      • 12.3.2 NavigationView를 구현하자
      • 12.3.3 TabLayout으로 탭을 구현하자
      • 12.3.4 AppBar의 동작을 제어하자
      • 12.3.5 FloatingActionButton과 SnackBar를 적용하자
    • 12.4 정리
    •  
  • ▣ 13장: 안전한 앱을 만든다: 보안 검사
    • 13.1 안드로이드 보안 모델을 이해하자
      • 13.1.1 안드로이드 소프트웨어 스택과 보안
      • 13.1.2 리눅스의 보안 모델을 이해하자
      • 13.1.3 Permission에 관해 이해하자
      • 13.1.4 Runtime Permission에 관해 이해하자
      • 13.1.5 앱 간의 Permission을 이해하자
    • 13.2 보안에 강한 앱을 만들자
      • 13.2.1 서명 검증을 구현하자
      • 13.2.2 외부로부터의 입력 데이터를 검증하자
      • 13.2.3 디딤돌 공격을 받지 않기 위해
      • 13.2.4 데이터를 저장하자
      • 13.2.5 난독화하자
      • 13.2.6 동적 코드 로딩을 이해하자
      • 13.2.7 HTTPS 통신을 이해하자
    • 13.3 과거 사례로부터 배워 안전성이 높은 앱을 만들자
      • 13.3.1 비공개 데이터를 앱에 공개해 버린 사례에서 배우자
      • 13.3.2 WebView의 과거 사례에서 배우자
      • 13.3.3 OS의 취약성을 이해하자
      • 13.3.4 안전성이 높은 앱으로 완성하자
    • 13.4 정리
    •  
  • ▣ 14장: 척척 움직이는 경쾌한 앱으로 완성한다: 병목 개선
    • 14.1 앱을 척척 움직이게 하는 달성 기준을 알자
      • 14.1.1 척척 움직이는 앱이란 어떤 것일까
      • 14.1.2 척척 동작하는 앱을 만드는 데 필요한 지식을 정리하자
    • 14.2 병목을 발견하자
      • 14.2.1 StrictMode로 확인하자
      • 14.2.2 프로파일러를 활용하자
    • 14.3 레이아웃을 최적화해 성능을 높이자
      • 14.3.1 lint로 다양한 문제를 검사하자
      • 14.3.2 GPU Overdraw로 불필요한 그리기의 중복을 없애자
      • 14.3.3 Hierarchy Viewer로 레이아웃 구조를 파악하자
    • 14.4 메모리를 의식하고 개발하자
      • 14.4.1 다양한 메모리 상황을 확인하자
      • 14.4.2 LeakCanary를 활용해 메모리 누수를 방지하자
    • 14.5 그밖의 최적화 방법을 이해하자
    • 14.6 정리
    •  
  • ▣ 15장: 모네타이즈를 실현한다: 인앱 결제 구현
    • 15.1 모네타이즈를 이해하자
      • 15.1.1 모네타이즈의 기본을 이해하자
      • 15.1.2 광고 모델을 이해하자
      • 15.1.3 과금 모델을 이해하자
      • 15.1.4 모네타이즈 모델을 조합하자
    • 15.2 인앱 결제를 구현하자
      • 15.2.1 In-App Billing(IAB)의 기본을 이해하자
      • 15.2.2 인앱 상품 관리를 이해하자
      • 15.2.3 결제 처리 구현 환경을 준비하자
      • 15.2.4 IInAppBillingService.aidl로 IAB를 구현하자
      • 15.2.5 매번 과금을 구현하자
    • 15.3 IAB를 테스트하자
      • 15.3.1 테스트 전략을 세우자
      • 15.3.2 정적 응답으로 단위 테스트를 하자
      • 15.3.3 테스트 계정으로 결합 테스트를 하자
      • 15.3.4 실제 결제로 운영 테스트를 하자
    • 15.4 정리
    •  
  • ▣ 16장: 지문인증 API를 활용한다: 지문인증 구현
    • 16.1 지문인증을 이해하자
      • 16.1.1 지문인증 관련 API를 이해하자
      • 16.1.2 지문인증을 앱에 내장하자
      • 16.1.3 디바이스의 잠금화면을 앱에서 이용하자
      • 16.1.4 지원 단말을 확인하자
    • 16.2 지문인증 관련 API를 구현하자
      • 16.2.1 구글의 예제 코드를 확인하자
      • 16.2.2 Fingerprint Authentication을 구현하자
      • 16.2.3 Confirm Credential을 구현하자
    • 16.3 정리
    •  
  • ▣ 17장: 앱의 장점을 전하자: 앱 공개
    • 17.1 개발자 콘솔을 활용해 한발 앞서가는 릴리스를 구현하자
      • 17.1.1 알파 버전/베타 버전을 활용하자
      • 17.1.2 apk를 나누어 릴리스하자
    • 17.2 사용자 설치 수를 자세히 이해하자
      • 17.2.1 A/B 테스트로 페이지 전환율을 높이자
      • 17.2.2 설치에 관한 데이터를 이해하자
    • 17.3 사용자에게 적절히 앱을 전달하자
      • 17.3.1 앱이 문제없이 동작하는지 파악하자
      • 17.3.2 사용자의 리뷰를 확인하고 응답하자
      • 17.3.3 릴리스 빈도와 방법을 최적화하자
    • 17.4 정리
    •  
  • ▣ 18장: 공개한 앱을 성장시키자: 그로스 핵
    • 18.1 설치 수를 늘리자
      • 18.1.1 유입 채널을 점검하자
      • 18.1.2 자연 유입과 ASO를 이해하자
      • 18.1.3 채널별로 효과가 높은 유도에 힘을 쏟자
      • 18.1.4 프로모션과 광고를 정리하자
    • 18.2 일상에서 많이 사용되는 앱을 목표로 하자
      • 18.2.1 지표를 모두 찾아내 개선점을 파악하자
      • 18.2.2 개선책을 실시하자
      • 18.2.3 처음 시작할 때 효과적으로 앱을 소개하자
      • 18.2.4 앱을 널리 퍼뜨리자
    • 18.3 정리
    •  
  • ▣ 19장: 푸시를 활용해 실시간으로 정보를 전달한다: GCM의 이해
    • 19.1 푸시 알림의 장점과 이용법을 이해하자
      • 19.1.1 푸시 알림의 기본을 이해하자
      • 19.1.2 로컬 푸시와 리모트 푸시의 차이를 알자
      • 19.1.3 푸시 알림을 효과적으로 사용하자
    • 19.2 리모트 푸시를 구현하자
      • 19.2.1 GCM과 아키텍처를 이해하자
      • 19.2.2 구글의 예제 코드를 실행해 보자
      • 19.2.3 GCM을 구현하자(클라이언트)
      • 19.2.4 서버에서 푸시를 구현하자
    • 19.3 GCM을 활용하자 ~ GCM 주제 메시징 ~
      • 19.3.1 구독한 사람에게만 푸시하자
    • 19.4 정리

예제코드 관련 GitHub 페이지

  • 136쪽, 5번째 줄

    RepositoryListActivity는 상세 화면을 표시하는 Activity입니다.

    ==>

    RepositoryListActivity는 리포지토리 목록을 표시하는 Activity이고,DetailActivity는 상세 화면을 표시하는 Activity입니다.

  • 138쪽, 예제 5-3의 제목

    RepositoryListAdapter.java ==> RepositoryListActivity.java