안드로이드 스터디 로드맵 영상 정리
안드로이드 스터디 로드맵
https://tv.naver.com/v/9329737
Level 0 - 기본기
기본기 - 알아야할 최소한의 전공 지식
기본기 - 네트워크 프로그래밍 추천 서적(심화)
- 인프라를 보는 눈이 생긴다
- 리눅스, 윈도우의 IO 통지 모델의 메커니즘 이해
- UNIX Network Programming, NETWORK PROGRAMMING FOR MICROSOFT WINDOWS
기본기 - T
- 우선 T자형 인재
- 5대 과목 + git + 언어
Level 1 - 키워드
키워드의 시작
- Android Developers 유튜브 채널
- Google IO, Android Dev Summit
- 안드로이드 모든 키워드의 발생지!
키워드 수집 - 커뮤니티, 컨퍼런스
- 1년 마다 열리는 컨퍼런스
- Naver Deview, if kakao, Airbnb Open, Facebook F8, 드로이드 나이츠...
- Facebook 페이지
- 생활코딩, GDG, 9XD, 안드로이드 개발자 모임...
- 오픈소스
- Pretty Awesome Lists, Android Arsenal, ExoPlayer...
- 모임 플랫폼에서 올라오는 네트워킹 행사
- onoffmix, festa, event-us, meetup...
- Medium
- AndroidPub, ProAndroidDev...
- 블로그
- 커니의 안드로이드, 박상권의 삽질블로그, Pluu Dev, 아라비안 나이트, 돼지왕 왕돼지 놀이터, Realm...
Level 2 - 안드로이드
안드로이드 개발자 문서에 다 나와있어!
안드로이드 개발자 문서에 다 나와있어!
4대 컴포넌트
- Activities
- Services
- Broadcast receivers
- Content providers
Jetpack
- Fragment
- ConstraintLayout
- ViewPager
- RecyclerView
Inflater, View
- 정형화된 형태로만 쓴다
- Fragment를 재활용 단위로 가져감
- xml문제로 빌드가 안되는 걸 잘 파악하지 못함
- Inflater, View에 대한 이해가 있으면 좋은 구조의 View를 만들 수 있다.
Inflater란 ?
- "부풀게 하다"
- xml 파일을 읽어와서 파싱한 뒤 객체로 만드는 과정
- IO와 탐색을 동반하기 때문에 비용이 있는 동작
View 기반으로 이해하기
- Tools - Layout Inspector
- 내가 만든 화면은 어떻게 생겼을까?
View란?
- View는 화면의 직사각형 영역을 차지하며 그리기 및 이벤트 처리를 담당
- View는 UI 구성 요소 (버튼, 텍스트 필드 등)를 만드는데 사용되는 위젯의 기본 클래스
- ViewGroup은 View의 서브 클래스로 다른 View 또는 다른 ViewGroup들을 보유하는 컨테이너 View
- ViewGroup 구현체
- ConstraintLayout, RecyclerView, ViewPager
- View 트리를 전위 순회하면서 처리해 나가는 구조
- 깊이 우선 탐색 (DFS)
- View 계층을 최소화하는 이유
- 렌더링 - measure - layout - draw
- 렌더링 뿐만 아니라 터치 이벤트 전달도 유사한 메커니즘으로 전달
안드로이드 - Fragment vs View
Level 3 - 비동기
비동기
- Thread
- Executor
- CompletableFuture(java 8, sdk≥24)
- AsyncTask
- Loader
- WorkManager
- Rx
- Coroutine
Rx, Coroutine 그냥 쓰면 될까?
- 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 - Best Practice - Processes and Threads Overview ( 참고해서 함께 보기 )
Callback에 대한 이해는 필수!
- Runnable 왜 있을까?
- subroutines, lambda expressions, 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...
비동기 추천 서적
⇒ 자바 병렬 프로그래밍, Efficient Android Threading
비동기 - Thread, MessageQueue, Handler, Looper
- 이 그림을 이해하면 끝!
- #Consumer-ProducerPattern(생성자 소비자패턴) #MainThread #UiThread #MessageQueue #Handler #MainLooper #Looper #HandlerThread
- 이 이후 Rx, Coroutine을 사용한다!
비동기 - background processing
- 정확한 타이밍에 실행이 보장되길 원하면? Foreground Service
- 특정 조건을 걸고 실행이 보장되길 원한다면? JobScheduler, JobDispatcher, AlarmManager, BroadCastReceivers
비동기 - WorkManager
Level 4 - 성능, 최적화
안드로이드 성능 최적화 - 60fps
- 안드로이드는 초당 60프레임을 렌더링
- 1프레임을 표현하려면? 1/60 = 약 16ms
안드로이드 성능 최적화 - Frame Drop
안드로이드 성능 최적화 - Profile GPU rendering
안드로이드 성능 최적화
- MainThread → Worker Thread
- UI업데이트가 순차적으로 진행될 수 있도록 조절
- CPU → GPU
- GPU에 안그려도 되는 부분을 알려준다.
- #ViewHierarchy #DoubleLayoutTaxation #Async #Overdraw #AnimationProperty #Cache #Clipping #ObjectPool #HardwareAcceleration #VSYNC
안드로이드 성능 최적화 - 추천 서적
Level 5 - 프레임워크
안드로이드 프레임워크
- 필요할까?
- NDK 개발 시에는 필수
- 코드 레벨까지 보는 건 비추
- 성능 최적화시에도 알아야할 내용들이 많기 때문에 어느 정도는 알아야한다..
안드로이드 프레임워크 - AOSP
- Android Open Source Project
- Configure - RUNTIME
- #.class #.dex #Dalvik #ART #D8 #R8 #AOT #JIT
- 컴파일러 관련 내용
- Develop - GRAPHICS
- #SurfaceView #TextureView #BufferQueue #SurfaceFlinger #Surface #Canvas #SurfaceHolder
- 화면 렌더링 관련 내용'
- Develop - ARCHITECTURE
- #HAL #Context #Parcel #BinderIPC #SystemServices #MediaServer #SystemServer
- IPC관련 내용
안드로이드 프레임워크 - 추천 서적
Level 6 - 언어
언어 - 무엇을 해야할까?
언어 - Kotlin
- Google이 말하길...
- Kotlin First!
- 예제 코드 - Kotlin Default
- Kotlin 100% 라이브러리들 등장 중...
- 곧 Java 추월 예정
- Kotlin은 뿌리부터 새로운 언어가 아님
- 각 언어들의 좋은 점을 차용
- Java Collection을 그대로 사용, 현재는 Java로 만들어진 라이브러리를 사용해야하는 경우가 대부분
- 함수가 1급 객체이며 함수 타입 존재
- 함수를 변수, 인자, 반환 값으로 전달할 수 있다.
언어 - Java
- 아직까지 많이 사용되는 언어
- 기존 Java 프로덕트가 상당히 많음
- 객체지향을 잘 알고 쓰면 생산성에 크게 문제 없음
- Android는 Java8은 SDK ≥ 24(Nougat) 부터 제대로 사용 가능
- Min SDK 24 정도 되려면...?
- 혀재 Java 13까지... Java 8도 안되는데 Java 9은 언제?
- 갈 길이 멀다
- Java 8은 함수 타입이 없음
- RxJava 사용시 어느 정도 모던한 개발 가능
언어 - 서적 고르는 팁
- Effective ~
- Modern ~
- ~ in Action
- O'REILLY
언어 - Java vs Kotlin
- 쓰고 싶은거 쓰자
- Java
- 내가 지금 자바를 알고 있고 안드로이드를 빨리 배우고 싶다면...
- 가고 싶은 곳이 자바를 사용한다면
- Kotlin
- 처음 입문한다면...
- 좀 더 모던한 개발을 하고 싶다면...
언어 - Kotlin - 추천 서적
- Kotlin in Action
- Effective Kotlin
언어 - Kotlin - Kotlinconf
언어 - JAVA - 추천 서적
- Thinking in JAVA
- JAVA in Action
- Effective Java
프로그래밍 패러다임
- wiki) 프로그래밍 패러다임은 기능에 따라 프로그래밍 언어를 분류하는 방법. 언어는 여러 패러다임으로 분류 할 수 있다.
- 유행
- 프로그래밍 관점을 갖게 해 주고, 결정하는 역할
- 서로 다른 프로그래밍 언어는 서로 다른 프로그래밍 패러다임을 지원
- 새로운 것을 가능하게도 하지만 어떤 기법을 금지 함
- #StructuredProgramming #Object-OrientedProgramming #FunctionalProgramming #ReactiveProgramming #FunctionalReactiveProgramming #Modular Programming
패러다임
- Kotlin, Java는
- 객체지향프로그래밍(Object-Oriented Programming)
- 함수형프로그래밍(Functional Programming)
객체지향프로그래밍 - 추천 서적
- #OOP #클래스 #객체 #메시지 #추상화 #캡슐화 #상속 #구성 #다형성 #S.O.L.I.D
- 서적 이름 : 클린소프트웨어, 실용주의 디자인 패턴
객체지향프로그래밍 - 5대 원칙 ★★★
- OOP의 5대 원칙
- 단일 책임 원칙(Single responsibility principle) - SRP
- 개방 폐쇄 원칙(Open/Closed principle) - OCP
- 리스코프 치환 원칙(Liskov substitution principle) - LSP
- 인터페이스 분리 원칙(Interface segregation principle) - ISP
- 의존관계 역전 원칙(Dependency inversion principle) - DIP
객체지향프로그래밍 - 디자인 패턴
함수형프로그래밍 - 추천 서적
- 클래스가 아닌 함수가 재활용 단위
- 함수는 1급 객체
- #람다 #클로저 #순수함수 #고차함수 #lazy #커링 #재귀 #메모이제이션 #모나드
- 서적 이름 : 함수형 사고
Level 7 - Best Practice
잘 변하지 않는 것들..
TODO
고인물이 되지 말자
- 키워드 수집 꾸준히
- 좋은 코드를 짜기 위한 훈련을 해라
기록
테스트
- 한 가지 일만 하는 함수로 작성했다면 유닛테스트를 작성해보자
- 좋은 구조로 가는 지름길이 되기도 한다.
- CI
- #TDD #BDD #Junit #Dummy #Stub #Spy #Fake #Mock #Mockito #PowerMock #Robolectric #CI #Jenkins #TestCoverage #Jacoco
커뮤니케이션
- 개발을 잘한다 ≠ 일을 잘한다
- 관련 서적 : 클린 코더