Skip to content

Latest commit

Β 

History

History
212 lines (145 loc) Β· 6.44 KB

0405_DroidKnights_2019.md

File metadata and controls

212 lines (145 loc) Β· 6.44 KB

DroidKnights 2019

DroidKnights 2019

πŸ‘ 총평

  • μž‘λ…„λ³΄λ‹€ ν•œμΈ΅ 더 재밌고 μœ μ΅ν•΄μ§„ λ“œλ‘œμ΄λ“œλ‚˜μ΄μΈ !
  • νŠΈλž™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/)

8. Advanced MVP

  • 🎀 λ°œν‘œμž : λ°•λ―Έλ₯΅
MVPλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ κ²ͺ은 μ‹€μˆ˜λ“€μ— λŒ€ν•œ κ²½ν—˜λ‹΄κ³Ό λ¦¬νŒ©ν† λ§ κ³Όμ •

View:
View 의 μ½”λ“œλŸ‰μ΄ 점점 λŠ˜μ–΄λ‚¨ -> passive ν•˜κ²Œ μž‘μ„± (ui와 λ‘œμ§λΆ„λ¦¬ 및 μœ λ‹›ν…ŒμŠ€νŠΈ 용이)
μ–΄λ–»κ²Œ νŒ¨μ‹œλΈŒν•˜κ²Œ?


ν”„λ ˆμ  ν„° :
ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±μ΄ 잘 μ•ˆλœλ‹€
ν”„λ ˆμ  ν„°κ°€ λ„ˆλ¬΄ λΉ„λŒ€ν•΄μ§€λŠ” 것 κ°™λ‹€.

-> ν”„λ ˆμ  ν„°μ— μ•ˆλ“œλ‘œμ΄λ“œ 쒅속성이 있으면 μ•ˆλœλ‹€.
-> ν”„λ ˆμ  ν„°κ°€ λΉ„λŒ€ν•˜μ§€μ§€ μ•ŠκΈ° μœ„ν•΄μ„œλŠ” 둜직의 뢄리가 ν•„μš”ν•˜λ‹€

ui둜직과 λΉ„μ¦ˆλ‹ˆμŠ€/도메인 둜직의 뢄리
-> ν”„λ ˆμ  ν„°λŠ” ui둜직만
-> λͺ¨λΈμ΄ λΉ„μ¦ˆλ‹ˆμŠ€/도메인 둜직만

Model
repository
usecase 에 μžˆμ–΄μ•Ό ν•˜λŠ” (ν…ŒμŠ€νŠΈλ˜μ–΄μ•Ό ν•˜λŠ”) λ‘œμ§μ€ λ ˆν¬μ§€ν† λ¦¬μ— 있으면 μ•ˆλœλ‹€.
-> 그렇지 μ•ŠμœΌλ©΄ λ ˆν¬μ§€ν† λ¦¬μ— μ•ˆλ“œλ‘œμ΄λ“œapiμ˜μ‘΄μ„±μœΌλ‘œ 인해 μœ μ¦ˆμΌ€μ΄μŠ€μ— λŒ€ν•˜ γ„΄ν…ŒμŠ€νŠΈκ°€ λΆˆκ°€λŠ₯해짐

UnitTest
ν…ŒμŠ€νŠΈμ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜κ°€ 어렀움
-> μ½”λ“œν•˜λ‚˜λ§Œ λ°”λ€Œμ–΄λ„ ν…ŒμŠ€νŠΈμ½”λ“œ μ „λΆ€ μˆ˜μ •
-> μ˜λ―Έμ—†λŠ” 객체 계속 생성

μ˜λ―Έμ—†λŠ” 객체, λ³€μˆ˜λ₯Ό μ™œ 생성해야 ν•˜λŠ”κ°€?
-> ν”„λ ˆμ  ν„°λŠ” 객체가 μ–΄λ–€λ†ˆμ΄λ“  μ• μ΄ˆμ— 보지 μ•Šκ³  신경쓰지 μ•Šκ³ , μ‹ κ²½μ¨μ„œλ„ μ•ˆλκΈ° λ•Œλ¬Έ