μλ
λ³΄λ€ νμΈ΅ λ μ¬λ°κ³ μ μ΅ν΄μ§ λλ‘μ΄λλμ΄μΈ !
νΈλ3κ° λͺ¨λ λ€ λ£κ³ μΆμ λ΄μ©λ€μ΄μ΄μ κ³ λ₯΄κΈ°κ° κ΄΄λ‘μΈ μ λλ‘ λ΄μ©λ€μ΄ μ λΆ μμ°¬ λ΄μ©λ€μ΄μλ€.
1. RxJava ꡬλ
κ³Ό ꡬλ
μ κ±° λ©μ»€λμ¦ μ€λͺ
π€ λ°νμ : λ
Έμ¬μΆ
ꡬλ
μ κ±°λ₯Ό νλ μ΄μ :
무ν μ΄λ²€νΈ μ€νΈλ¦ΌμΌλ‘ μΈν λ©λͺ¨λ¦¬ λμ λ°©μ§
2. Android Project with Multi Module
π€ λ°νμ : μ₯μ μ₯
κΈλ‘λ²κ΅μ‘μ± μ½΄λ€
λΉ λ₯΄κ² κ°λ° -> λ€μν λͺ¨λνλ‘ κ°λ°
λͺ¨λλ¨μλ‘ μΆκ°, μμ κ° λΉ λ¦
λͺ¨λμ΄λ?
νλ‘μ νΈλ₯Ό λ³κ°μ κΈ°λ₯ λ¨μλ‘ λΆν
λͺ¨λκ° μ’
μμ±
λΌμ΄λΈλ¬λ¦¬μ μλλ‘μ΄λλͺ¨λμ μ°¨μ΄ :
μλλ‘μ΄λ λΌμ΄λΈλ¬λ¦¬ : AAR
μλλ‘μ΄λ μ±λͺ¨λ -> apk
μλλ‘μ΄λ λΌμ΄λΈλ¬λ¦¬ -> aar
μλ° λΌμ΄λΈλ¬λ¦¬ -> jar
νΉμ κΈ°λ₯μ λν λ°λͺ¨κ° νμν κ²½μ°
νΉμ κΈ°λ₯λ° λν λͺ¨λμ λ§λ€κ³ μ΄ λͺ¨λμ μ’
μλ°λ λ°λͺ¨μ±μ λ°λ‘ μμ±
μ΄ν μμ©μ΄ λ μ―€
1. κΈ°λ₯μ΄ λ무 ν¬κ±°λ
2. λ€λ₯Έ μ±μμ μ¬μ©κ°λ₯μ±μ΄ μμ λ (λλ ν΄λΉ κΈ°λ₯μΌλ‘ μλ‘μ΄ μ±μ λ§λ€ μ μμ κ² κ°μ λ)
3. κΈ°μ‘΄μ±μ΄ λ무 λ¬΄κ±°μΈ λ
μ½λμ μ¬μ¬μ©μ±
μμ‘΄μ± μ μ μ½λ
λͺ¨λλ¨μμ μ½λ μμ μ©μ΄
λΉλμκ°μ λλ¦¬κ² λλ μμλ€ :
λͺ¨λκ°μ μ’
μμ±μ΄ 볡μ‘ν΄ μ§ μλ‘ λΉλμκ°μ΄ λμλ¨ (νμλͺ¨λ μμ μΌλ‘μΈν μμ λͺ¨λ μ¬λΉλ)
μ΄λ
Έν
μ΄μ
νλ‘μΈμλ₯Ό (λ²ν°λμ΄ν, λκ±°) μ¬μ©ν κ²½μ°
μ λ³νμ§ μλ κΈ°λ₯κ³Ό λ
립μ μΈ κΈ°λ₯μ λͺ¨λλ‘ λλλ©΄ μ’μ
3. Clean Architecture (in Android) Revised
π€ λ°νμ : ν©μ±ν
Android Application
iOS Application
Web Application
Server App
... Application
[Use Case] [Platform = I/O Channel] Application
ex) TODO Android Application
Use caseκ° μ무λλ νλ«νΌλ³΄λ€λ λ μ€μνμ§ μμκΉ?
-> is my use-case code bound to Platform? μ μ€μΌμ΄μ€ μ½λκ° λ΄ νλ«νΌμ μ’
μμ μ΄μ§ μμκ°?
->
Architecture is about intent, not framework --Uncle Bob
μΌνλͺ°μμ μνμ ꡬ맀νλ μ μ€μΌμ΄μ€
μΈν°νμ΄μ€ μ΄λν° λ μ΄μ΄ : μΈλΆμΈκ³μ (λ€νΈμν¬ dbλ±)λ‘λΆν°
λ°μ΄ν°λ₯Ό λ°μμ€λ "νλ μ ν
μ΄μ
λ μ΄μ΄"λ₯Ό μ΄μ©νμ¬
λΉμ¦λμ€λ‘μ§κ³Ό λμ¨νκ² κ²°ν©
(= μν°ν° κ²μ΄νΈμ¨μ΄)
Entity
λΉμ¦λμ€λ‘μ§ κ°μ²΄?
Separate Business Logic form the Changeable
:λ°λ μ μλ λͺ¨λ κ²μ λΉμ¦λμ€ λ‘μ§μΌλ‘ λΆν° λΆλ¦¬νλΌ.
:μ μ€μΌμ΄μ€(λΉμ§λμ€λ‘μ§ λλ μλΉμ€κΈ°ν)μ μμ μ΄ μλλ° μ μ€μΌμ΄μ€ μ½λκ° μμ λλ©΄ μλ¨
:sqlite λ₯Ό realmμΌλ‘ λ°κΏ λ DBμ½λκ° μλ uscecaseμ½λκ° λ³νλ€λ©΄ ν΄λ¦°μν€ν
μ³κ° μλ!
tao
UI μμ , νλ«νΌ μμ λ±μ λ°λ₯Έ μ½λ μμ μΌλ‘ λΆν° λΉμ¦λμ€λ‘μ§μ μ§ν¬ μ μλ€.
-> ν
μ€νΈ κ°λ₯
ν΄λ¦°μν€ν
μ³κ° MVP/MVVM λ³΄λ€ λ«λ€?
-> MVP, MVVM μ μ 체 μν€ν
μ³λΌ μλ presentaion λ μ΄μ΄μ ꡬν
-> ν΄λ¦°μν€ν
μ³μ MVP, MVVM
ν΄λ¦°μν€ν
μ³λ ν΄λ¦°νλ€?
-> μν΄λ°₯μ ν΄λ¦°μ±μ μ
-> μ½λλ² μ΄μ€ κ°λ
μ±μ μΌλΆ λ¨μ΄μ§ μ μμ.
ν΄λ¦°μν€ν
μ³λ λͺ¨λν λμμΈμ΄ μλλ€? (μλ λμμΈμ΄λ€)
->
ν΄λ¦°μν€ν
μ³μ DDDμμ κ΄κ³?
-> λͺ¨λ κΆκ·Ήμ μΌλ‘ μνλ λ°©ν₯μ΄ λΉμ·νκΈ° λλ¬Έ (λλ©μΈ, μ μ€μΌμ΄μ€ 보νΈ)
-> μλ‘ λ€λ¦
4. Kotlin κΌ ν΄μΌνλμ?
π€ λ°νμ : λ°μκΆ
2017λ
Google I/O 곡μμΈμ΄λ‘ μ§μ
κ΅¬κΈ λ΄μμλ μλλ‘μ΄λ 곡μμΈμ΄λ‘ κ°λ° μ€
곡μλ¬Έμλ μ λΆ μ½νλ¦°μΌλ‘ μ 곡
μλλ‘μ΄λ 곡μ μμ μ½λλ 100% μ½νλ¦°μΌλ‘ μ 곡
@layoutres
google kotlin cheat sheet
7. Android Gradle Plugin λ²κ·Έμ‘κΈ°
π€ λ°νμ : μ°¨μνΈ
μ± ν¬λμ
:apkμ 리μμ€κ° λΉ μ§
:proguard Relase Buildμμλ§ μ€λ₯ λ°μ
:μ½λλ₯Ό μ€μ΄λ©΄ λ©μ©‘ν΄μ§
:νλ‘κ°λ λ£°μ μ‘°μ νλ©΄ λ©μ©‘ν΄μ§
νλ‘κ°λ μμν jar μλ 리μμ€νμΌμ΄ μ μμ μΌλ‘ λ€μ΄μμ
κ·Έ μ΄ν μμ
λ΄μμ νμΈ
μλλ‘μ΄λ νλ‘μ νΈλ₯Ό λΉλνλλ°λ gradle λΏ μλλΌ
Android gradle plugin (AGP)κ° νμνκ³
AGPλ μ€νμμ€ (AOSP)λ‘ κ³΅κ°λμ΄ μλ€.
AOSP
μλλ‘μ΄λ κ΄λ ¨ μ€νμμ€ νλ‘μ νΈ
Android OS, ToolChain, (SDK, NDK...), suuport library, ADT, Doc λ±...
AGPλ₯Ό λ‘컬PCμ μ€μΉν λ€μ
root build.gradleμ λ‘컬 λ©μ΄λΈμΌλ‘ μ€μ νκ³
λνλμμ gradleμ μ μ₯ν λ²μ (3.3.0-dev)μΌλ‘ μ§μ ν΄μ£Όλ©΄
λ‘컬μ μ€μΉν AGPλ₯Ό μ΄μ©νμ¬ λΉλν μ μλ€.
ZipνμΌμλ 65536 μ΄μμ νμΌμ κ°μ§ μ μλ€ (νμΌ κ°―μλ₯Ό λνλ΄λκ² 2λ°μ΄νΈμ΄κΈ° λλ¬Έ)
Report Android Issue : (http://b.android.com/)
π€ λ°νμ : λ°λ―Έλ₯΅
MVPλ₯Ό μ¬μ©νλ©΄μ κ²ͺμ μ€μλ€μ λν κ²½νλ΄κ³Ό 리ν©ν λ§ κ³Όμ
View:
View μ μ½λλμ΄ μ μ λμ΄λ¨ -> passive νκ² μμ± (uiμ λ‘μ§λΆλ¦¬ λ° μ λν
μ€νΈ μ©μ΄)
μ΄λ»κ² ν¨μλΈνκ²?
νλ μ ν° :
ν
μ€νΈ μ½λ μμ±μ΄ μ μλλ€
νλ μ ν°κ° λ무 λΉλν΄μ§λ κ² κ°λ€.
-> νλ μ ν°μ μλλ‘μ΄λ μ’
μμ±μ΄ μμΌλ©΄ μλλ€.
-> νλ μ ν°κ° λΉλνμ§μ§ μκΈ° μν΄μλ λ‘μ§μ λΆλ¦¬κ° νμνλ€
uiλ‘μ§κ³Ό λΉμ¦λμ€/λλ©μΈ λ‘μ§μ λΆλ¦¬
-> νλ μ ν°λ uiλ‘μ§λ§
-> λͺ¨λΈμ΄ λΉμ¦λμ€/λλ©μΈ λ‘μ§λ§
Model
repository
usecase μ μμ΄μΌ νλ (ν
μ€νΈλμ΄μΌ νλ) λ‘μ§μ λ ν¬μ§ν 리μ μμΌλ©΄ μλλ€.
-> κ·Έλ μ§ μμΌλ©΄ λ ν¬μ§ν 리μ μλλ‘μ΄λapiμμ‘΄μ±μΌλ‘ μΈν΄ μ μ¦μΌμ΄μ€μ λν γ΄ν
μ€νΈκ° λΆκ°λ₯ν΄μ§
UnitTest
ν
μ€νΈμ½λμ μ μ§λ³΄μκ° μ΄λ €μ
-> μ½λνλλ§ λ°λμ΄λ ν
μ€νΈμ½λ μ λΆ μμ
-> μλ―Έμλ κ°μ²΄ κ³μ μμ±
μλ―Έμλ κ°μ²΄, λ³μλ₯Ό μ μμ±ν΄μΌ νλκ°?
-> νλ μ ν°λ κ°μ²΄κ° μ΄λ€λμ΄λ μ μ΄μ λ³΄μ§ μκ³ μ κ²½μ°μ§ μκ³ , μ κ²½μ¨μλ μλκΈ° λλ¬Έ