안드로이드 개발자로서 잘하는 개발자가 되기 위해선 무엇이 필요할까?
체워도 체워도 언제나 고민이다.
우연히 찾게된 안드로이드 개발자 로드맵 PPT이다.
네이버 테크 콘서트에서 발표한 내용을 담은 PPT였다.
더 검색해보니 영상도 찾을 수 있었다.
영상을 보면서 나오는 내용들 대부분은 접하거나 공부한 내용이다.
하지만 부족한 부분도 있고 공부했다 해도 완벽하게 설명할 수 있는가 하면 아니다.
안드로이드 개발자로서 튼튼한 기본기를 가지고
이를 바탕으로 더 많은 것을 할 수 있는 개발자가 되기를 바란다.
발표한 내용을 바탕으로 포스팅을 정리해보려 한다.
PPT
https://www.slideshare.net/NaverEngineering/techcon-2019-mobile-android3
영상
https://tv.naver.com/v/9329737/list/486582
기본기
CS(Computer Science)
DB + OS + Network + Algorithm + Data Structures
개발자라면 너무 당연히 접해본 것들이다.
대학교에서 공부했고 취업을 하기 위해 공부했고
실무를 하면서도 계속 부족하다고 느끼는 기본 중의 기본이다.
T자형 인재
DB + OS + Network + Algorithm + Data Structures + Git
Framework + Programming Language
Git을 사용하지 않는 회사는 거의 없다라고 생각한다.
Git까지 공부하고 나면 어떤 언어로 어떤 것을 개발할지 확장해 공부한다.
키워드
안드로이드 개발자로 정했다.
그렇다면 관련 키워드는 어디에서 나올까?
GoogleIO : 매년 구글의 기술을 설명하는 컨퍼런스
Android Dev Summit : 개발에 관해 집중적으로 발표하는 컨퍼런스
위의 컨퍼런스들을 통해 새로운 키워드들이 등장한다.
뒤늦게 대세가 된 후 접하기 보단 더 빠르게 기술에 대해 인지할 수 있다.
Android Developers Youtube : 컨퍼런스 발표 동영상이 올라와 있다.
https://www.youtube.com/user/androiddevelopers/videos
위의 컨퍼런스 외에 한국에서 진행하는 컨퍼런스들도 있다.
드로이드 나이츠, 코틀린 나이트, GoogleIO in Seoul, if kakao, Naver Deview 등
항상 관심을 가지고 참석해보도록 하자.
그 외에 사이트로
Android Weekly : 메일을 통해 안드로이드 뉴스를 전달해준다.
https://androidweekly.net/
안드로이드
개발을 하다보면 구글링이 필수가 된다.
하지만 구글링으로 나오지 않을 수도 있고 잘못된 정보를 다루고 있을 수 도 있다.
그렇기 때문에 공식 문서부터 찾아보는 방법을 권한다.
새로운 API를 접할 때
1. Android Developer 검색
2. Android Developer Medium, Blog 검색
3. CodePath Android Cliffnotes 검색
4. 구글링
Android Developer : 최신 정보는 영어로 먼저 나오기 때문에 영어로 보길 권장한다.
- Android Studio / User Guide
- Jetpack
- Kotlin
- Docs / Guides, References, Samples
https://developer.android.com/
Android Developer Medium
https://medium.com/androiddevelopers
Android Developer Blog
https://android-developers.googleblog.com/
Google Codelabs : 코드베이스로 익혀나가고 싶다면...
https://codelabs.developers.google.com/
CodePath Android Cliffnotes : 사용법, 꿀팁, 관련 오픈소스
https://guides.codepath.com/android
기본적인 내용
4대 컴포넌트 : Activities, Services, BroadcaseReceivers, ContentProviders
Jetpack : Fragment, ConstraintLayout, ViewPager, RecyclerView...
Inflater
View
Inflate, View
- XML -> Inflate -> 화면을 객체 형태로 만듬
- 비용이 있는 동작
- Layout Inspector로 만든 화면 보기
- 화면은 모두 View로 되어있다.
- 화면은 View의 트리구조형태이며 전위 순회하며 깊이우선탐색하여 처리해나아간다.
- 렌더링 : measure > layout > draw
- Fragment 역시 View : 즉 Fragment보다 View를 재활용 단위로 가져가는 것이 좋다.
View를 사용하면 xml에 넣거나 동적생성하여 재활성이 좋아진다.
비동기
안드로이드의 꽃!
비동기관련 기술들
- Thread
- Executor
- CompletableFuture(java8, sdk>=24)
- AsyncTask
- Loader
- WorkManager
- Rx
- Coroutine
AndroidDeveloper의 비동기 관련 내용
https://developer.android.com/
Docs - Core topics - Activities - Processes and app lifecycle
- foreground process
- visible process
- service process
- cached process
Docs - Core topics - Background tasks - Sending operations to multiple threads - Communicate with the UI thread
- UI Thread 의 정의와 통신하는 방법
- Handler, Looper, MessageQueue
Docs - Besr Practice - Processes and Threads Overview
- Thread 기본 사용법
Callback에 대한 이해
- Runnable 왜 있을까?
- subroutines, lamda, expressions, blocks, function pointers...
concurrency vs parallelism
synchronous vs asynchronous
blocking vs non-blocking
Java Concurrent
#synchronized #volatile #atomic #semaphore #ReentrantLock #LockFree #FalseSharing #ForkJoinPoll #Executor #BlockingQueue #CountDownLatch #Future ...
Thread, MessageQueue, Handler, Looper에 대한 이해
#Consumer-Producer Patter #MainThread #UiThread #MessageQueue #Handler #MainLooper #Looper #HandlerThread
https://academy.realm.io/kr/posts/android-thread-looper-handler/
위에 내용을 이해하고 Rx, Coroutine을 사용하자
정확한 타이밍에 실행이 보장되길 원한다면
: Foreground Service
특정 조건을 걸고 실행이 보장되길 원한다면
: JobScheduler, JobDispatcher, AlarmManager, BroadcastReceivers
WorkManager in Jetpack
- 기존의 파편화된 백그라운드 처리를 하나로 모아서 실행
성능 최적화
초당 60프레임 : 프레임당 16ms
한 프레임에 16ms보다 더 오래 걸리는 경우 프레임 드랍이 발생
프레임 드랍이 발생한다면
- MainThread -> WorkerThread
- UI 업데이트가 순차적으로 진행될 수 있도록 조절
- CPU -> GPU
- GPU에 안그려도 되는 부분을 알려준다
#ViewHierarchy #DoubleLayoutTaxation #Async #Overdraw #AnimationProperty #Cache #Clipping #ObjectPool #HardwareAcceleration #VSYNC
발표에서 보여주고자 하는 동영상이 어디있는지 모르겠지만
같은 내용을 다루는 듯 하다.
https://www.youtube.com/watch?time_continue=8&v=qk5F6Bxqhr4&feature=emb_title
안드로이드 프레임워크
우리가 사용하는 부분은 Application Framework까지이다.
NDK 개발시에는 필수로 더 로우레벨까지 공부해야 한다.
Android Open Source Project
- Cofigure / RUNTIME : 컴파일러 관련 내용
#.class #.dex #Dalvik #ART #D8 #R8 #AOT #JIT
- Develop / GRAPHICS : 화면 렌더링 관련 내용
#SurfaceView #TextureView #BufferQueue, #SurfaceFlinger, #Surface, #Canvas, #SurfaceHolder
- Develop / ARCHITECTURE : IPC 관련 내용
#HAL #Context #Parcel # BinderIPC #SystemServices #MediaServer #SystemServer
https://source.android.com/
언어
Kotlin이 인기가 많다.
Kotlin을 하려면 Java도 알아야 한다.
함수형 프로그래밍을 사용하기에는 Java보다는 Kotlin을 사용하는 것이 났다.
프로그래밍 패러다임
- 기능에 따라 프로그래밍 언어를 분류하는 방법. 언어는 여러 패러다임으로 분류 할 수 있다.
- 프로그래밍 관점을 갖게 해 주고, 결정하는 역할
- 서로 다른 프로그래밍 언어는 서로 다른 프로그래밍 패러다임을 지원
- 새로운 것을 가능하게도 하지만 어떤 기법을 금지 함
#StructuredProgramming #Object-OrientedProgramming #FunctionalProgramming #ReactiveProgramming
#FunctionalReactiveProgramming #Modular Programming
Kotlin과 Java는 객체지향프로그래밍, 함수형 프로그래밍패러다임을 가지고 있다.
객체지향프로그래밍
#OOP #클래스 #객체 #메시지 #추상화 #캡슐화 #상속 #구성 #다형성 #S.O.L.I.D
디자인 패턴
SourceMaking
https://sourcemaking.com/
함수형프로그래밍
- 클래스가 아닌 함수가 재활용 단위
- 함수는 1급 객체
#람다 #클로저 #순수함수 #고차함수 #lazy #커링 #재귀 #메모이제이션 #모나드
Best Practice
클린 아키텍처
클린 코드
리팩토링
굉장히 유명한 책들이다.
하지만 많은 학습이 전제되지 않은 상태에서는 의미가 없을 수 있다.
그러니 우선 이것만 해보자!
- 함수는 한가지 일만 한다.
- SRP : 클래스는 하나의 책임만 가진다.
- 상속 대신 구성
드로이드 나이츠에서 발표한 Clean Arhcitecture
(몇년전 발표. 첫 드로이드 나이츠로 기억하고 있다.)
https://academy.realm.io/kr/posts/clean-architecture-in-android/
TODO
키워드 수집
기록해라 : 블로그, Git과 같은 것들로 기록해라
테스트
- 유닛테스트를 작성해보자
- 좋은 구조로 가는 지름길이 되기도 한다.
- CI
#TDD #BDD #Junit #Dummy #Stub #Spy #Fake #Mock #Mockito #PowerMock #Robolectric #CI #Jenkins #TestCoverage #Jacoco
위에 내용들을 완벽 하게 익혀다고 생각한다면
다양한 기술들을 공부해 스펙트럼을 넓혀보자!