Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
내가 안드로이드 개발자가 되었을 때 아무도 알려주지 않은 것들(+MVP / MVVM ...
Search
Sa-ryong Kang
April 21, 2018
Programming
4.5k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
내가 안드로이드 개발자가 되었을 때 아무도 알려주지 않은 것들(+MVP / MVVM 이야기) - DroidKnight 2018
Sa-ryong Kang
April 21, 2018
More Decks by Sa-ryong Kang
See All by Sa-ryong Kang
Gen AI on Android
saryong
0
910
(Unofficial) Guide to App Architecture Guide Vol. 2 - DroidKaigi 2023
saryong
0
300
[EN] (Unofficial) Guide to App Architecture Guide Vol 1 - DroidKaigi 2022
saryong
0
570
[JA] (Unofficial) Guide to App Architecture Guide (Vol 1) - DroidKaigi 2022
saryong
2
1.3k
Android Testing Best Practices [ko]
saryong
0
270
Jetpack Compose: Beyond I/O 2021
saryong
0
210
Google의 개발문화와 프로세스(2) - Feedback & Code Review
saryong
0
700
Google의 개발문화와 프로세스(1): Scale & Efficiency / Testing
saryong
2
600
한때 개발을 접었던 창업자 출신 엔지니어를 구글로 인도해준 어떤 방법론
saryong
1
590
Other Decks in Programming
See All in Programming
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
490
LLM 101
dalinaum
0
380
JIS keyboard support in Omarchy
lef237
0
170
No More NoSuchMethodError
exoego
1
120
baseline으로 마이그레이션, 리팩토링 안전하게 맡기기
fornewid
1
640
TS 7.0 で baseUrl が使えなくなった今、パスエイリアスをどうするか
bicstone
1
280
React Native에 현대적인 빌드 도구 더하기: Rollipop 구현기
leegeunhyeok
0
170
AI-Powered Domain-Driven Design
ziobrando
0
360
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.5k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.9k
sbt 2.0: takeoff
eed3si9n
0
180
ActionController meets Protocol Buffers
sorah
1
750
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Done Done
chrislema
187
17k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Designing for Performance
lara
612
70k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
460
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
590
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
540
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
910
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
430
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
650
Transcript
ղо উ٘۽٘ ѐߊо غਸ ٸ ইޖب ঌ۰ ঋ Ѫٜ Speaker.
ъࢎܕ
Who is this guy? • ҃۱ 18֙ର SW ূפয (ݽ߄ੌ,
ߔূ٘, ਢ ۿূ٘ ೧ࠆ) • ತস ޙо: Ҵীࢲ ೠ ߣ, ೠҴীࢲ ف ߣ झఋস ೮ ݈ইݡ • ੌࠄ झఋসীࢲ ݽ߄ੌ ইఃఫ۽ Ӕޖ • ӝ۞ӝ ইࡅ: ೠҴী ইղ৬ ف ইٜҗ ъই৬ Ҋনܳ فҊ • ӓೠ ѐߊ: അ 6ѐ Android / iOS জ ܻਸ
• ࢸ݀ೠ 4.5֙ ػ झఋস • ੌࠄ ୭ ਭই ࠁ
ࢲ࠺झ ࠁਬ • but ت ਬਗ Үࢎ ٘ ࢲ࠺झ۽.. • ৻ࠗ ై ഃ হ ࣽ ై݅ਵ۽ Ҋࣘ ࢿ • ী࠺झ(ੌࠄ о۽ࣻӡ?) Ӕࢎೠ 9க ࠽٬ਸ ా૩۽ ॹ • Business-aware Engineerٜী ೧ ח ഥࢎ • ঠӔ Ә / ോੌ Ӕޖ Ә
दೞӝ ী... • ݽٚ ղਊਸ ೠ ߣী ೧ೞ ޅೞ࣊ب ҡଳणפ
• о߶ ӝ࠙ਵ۽ ٮۄয়दݶ ؾפ • ۖಬ ݀: ࢚ࣻ ղਊ iOSীب Ӓ۽ ਊ оמפ • ࠂण оמ: ठۄ٘ ղਊ ইې ݂ীࢲ ߉ਵप ࣻ णפ • https://speakerdeck.com/saryong/mvvm-iyagi-droidknight-2018
Buckle Up!
Chapter 1. ࢲۿ
ݽٚ ࠺ӓ द • যוզ ࢎש աܳ ઑਊ ࣑ࠗܰ...
֎... ߄ ೡ ঌ? Dilbert © 2018, Andrews McMeel
Syndication
উ٘۽٘ য ખ ٜ݅য ࠊ. ֎?! औѱ ೡ ࣻ ਗ਼ই.
Dilbert © 2018, Andrews McMeel Syndication
ୡࠁ ݽ߄ੌ ѐߊ Ҋҵ࠙ై • Device/version fragmentation: пয়ח ೮݅, ޖਸ
࢚࢚ೞٚ উ٘۽٘ח ӝ ޅೠ Ҕীࢲ ٍాࣻܳ . • લੌ ֈ ࠺زӝ: оՔঀ ࢤп೮؍ Ѫҗ ഃ ܲ ߑೱਵ۽ ۽ प೯ػ. ӒѪب ೦࢚ അغח Ѫب ইפ. • ঌоب ݽܳ Life Cycle ޙઁ: যڃ ҃ח ౠ Fragmentо दೞח दਸ ইղӝ ࠛоמ೧ࠁח ҃о . ೞ ઁੌ ਃೠ ചݶীࢲ.. • ҳӖ ޥо ࢜۽ Ѧ ղ֬ਸ ٸ݃ ઁח ૐࠗఠ դ. ח Ѫࠗఠ ઁ۽ ખ جইоѱ ٜ݅ۄҊ!! ଵҊ: Fxxx you Android Framework https://medium.com/@drinfo/fuck-you- android-framework-ddbb02c4ae48
ೞ݅.. উ જ ੌ݅ ח Ѥ ইפ.
୷ೞפ! ә ѐߊо غ࣑णפ.
ૌѢ ۨ߰স ࢤഝ • য ܐ۽ ׀ਸ جܻݶ ৻۽ ೞҊ
ࣁೠ ࠁٜ ݆. झఖয়ߡ۽, ݆ࣻ ౚషܻٜ.. • যଧযଧ ೞࠁפ ֢ೞب ࢤ҂ • উ٘۽٘ ߡ߹ ߨ, ۄࢎ , ա݅ ٣ߡӒ ֢ೞ, ߑয ٬, ... • Kotlin - ࠺Ү ֢۱ਵ۽ ࢜۽ যܳ ߓਕ ٬ೞח ب ॕॕ
Ӓ۞ա...
ҍ оয়ח ठۢ • җ э ࣘب۽ח प۱ ט ঋח
• ੋఠ֔ী ୡә ࢚ ࣻળ ܐח Ѣ হ • ҡଳ ܐܳ ও रਵݶ ցޖ য۰ਕ Ѣ ࢶޙ ࣻળ.. ױೠ Ѥ ঌѷח ؘ ޤۄח ݽܰѷ. • ޖࠁ ߸ী ޛযࠅ ࢎۈ হ. ղо ੜ ೞҊ ח ঌ ӡ হ
ղо উ٘۽٘ ѐߊо غਸ ٸ ইޖب ঌ۰ ঋও؍ Ѫٜ:
־ҵо ীࢲ ೞѱ ঌ۰ݶ ଵ જওਸ Ѫ э ޙٜ .
Clean Architecture - ѐߊ ҳਗੋо, ࢤࢎۈ ח ࢚ࣿੋо? •
ইפ.. ೞۄח ѱ ৵ ۧѱ ݆ই?! • ٜ ਃೞҊٜ ೞחؘ.. ઁ۽ ॳח ࢎۈ ߹۽ উ ࠁੋ. • زӒۆ җ֘ Ӓܿ ݈Ҋ ೧ ফӝח হפ?
MVVM, ԙ ೧ࠁҊ रणפ! • Ӕؘ যଧ೧ঠೡ ݽܰѷ. •
ॳݶ ଵ જחؘ.. ցޖ ࠂೞ. • ઁٜ ؘ݆, ٜ ઁпп. ޖट ইఃఫо ۧѱ ೧ ѱ হয?
MVP.. ઁ۽ ॄࠁҊ र. • ੌױ MVVMࠁח ए Ѫ э.
• ীח જ Ѫ эওחؘ.. ۽ંܳ ೯ೞࠁפ ژ ܲ ஶ܀۞ܳ ٜ݅Ҋ ח Ѫ э ӝ࠙ ৵ੌ ө..
RxJava: somebody help! • য۵! ഁтܽ! ־ҵо ખ ب৬!! •
ݒಿ LiveDataח ખ ए Ѫ эؘ ӒѪ݅ ыҊח গݒೠ ٠ب..
How the fxxx can I inject dependency? • ઓࢿ ੑ..
ূ ए Ѫ эওחؘ.. • হח decision making োࣘ - оݶ т ࣻ۾ ౠ ੋझఢझী ೠ injectionਸ যڌѱ ೧ঠ ബҗੋ Ѥ ցޖ ഁтܽ.
Test-Driven Developement: ೞݶ જחؘ.. ଵ જחؘ.. • Ӓ ݆Ҋ
݆ ਬ పझ ౚషܻٜ ীࢲ पઁ ࢚ਊ ۽ં ࣻળ ਬ పझܳ ݅٘ח ߨਸ ঌ۰ח Ѥ ೞաب হ. • જח Ѣ ࡤੋѢ ইջ?
None
ചੑ݃ী ࡅ दפয ѐߊ ഋ ૐ࢚ • ࠺ҙ: ই, ӒѢ?
࢜۽ Ѫب হח Ӓր ਬ೯ঠ.. Ӓ۠ Ѣ হযب ઁө ੜ ѐߊ೧৳Ҋ. • ౹یӈ ૐറҵ: ޤ ࢜۽ ѱ ա৳Ҋ? য়ט ਊ೧ࠁ. • ో ݅מ: ॶ ইח ో, ঌҊ ח ۄ࠳۞ܻ ंо ҍ प۱? • Low-hanging fruit: ए ޙઁী݅ ೞӝ
Chapter 42. উ٘۽٘ܳ ৈ೯ೞח ೞழܳ ਤೠ উղࢲ
ѐߊ ѐࢿী ٮۄ ݆ झఆ ܻо ݅.. Ӓېب
ف оо ਃೞҊ ࢤпפ.
1. Solution Provider • ঌҊ્ܻী ೠ Ө ೧: ܲ ࢎۈۄݶ
ҳഅೞ ޅೡ Ѫ э Ѫਸ, ܲ ࢎۈࠁ ف ߓח ࡅܰѢա ࢎૉ۽ زೞѱ ٜ݅ ࣻ ח ࢎۈ • Kotlin ژח Java য semantics Ө ਗܻ৬ য ࢸ҅ ୍ী ೠ ೧ • Dalvik ز ਗܻী ೠ ೧ • Activity / Fragment ਃೠ زਸ ۖಬ ٘ ۨ߰ীࢲ ೧ • উ٘۽٘о ചݶਸ ۪؊݂ ೞח ݒழפ્ ೧ • …
2. Architect • ղ ۽ંܳ, рױೠ README.md ੌ ৻ী ইޖ
ࢸݺ হب ܲ ѐߊ ীѱ ੋࣻੋ҅ೡ ࣻ • ղ ٘ܳ 1֙ ٍী द ࠌਸ ٸ ҍ߄۽ ೧ೡ ࣻ • ӏݽ ҳઑ ࣻب 1~2ੌ ղী ೧յ ࣻ ਸ ب۽ ਬোೞѱ ҳઑܳ ݅ٚ • Jr ূפযীѱ റࣘ ٬ਸ উबೞҊ ކٶ ځֈѹب ؼ ࣻળਵ۽ ӝࠄ ҳઑо ѼҊೞѱ ࢿೠ. ޖࠁ.. ੜޅػ ߑधਵ۽ ҳഅೞӝо ݒ য۵ب۾ ҳઑ ܳ ٜ݅ উ
উ٘۽ݫܳ ݒח ә ѐߊٜਸ ਤೠ উղ
द ߈ • ࠺ҙܳ ߡܻҊ ੌױ ࠗ٭ഃ ࠁࣁਃ! • ೧ࠁ
ঋਵݶ ೧ೞӝ য۰ ѐ֛ ݆ • द ৻۽ ए: Ѣ ݽٚ ࠙ঠীࢲ ੑޙਊ ౚషܻਸ औѱ ਵप ࣻ
–George Bernard Shaw “ف ࢎۈ п ыҊ ח ࢎҗ ೞաܳ
Үജೠݶ ৈ ೞաঀ ࢎҗ݅ ыҊ ਸ Ѫ. ೞ݅ ই٣যܳ Үജೞݶ п ف ѐঀਸ ыѱ ػ.”
ҕਬ ൨ • ֢ೞٚ Ҋٚ ݈ೡ Ѣܻо ࢤ҂ݶ, न धਸ
Բળ ҕਬೞࣁਃ. • ࠺तೠ ҙबࢎ ূפযٜਸ Բળ ݅աࠁࣁਃ. • ࠶۽Ӓח যڄөਃ? • : झܽࢫਵ۽ بߓೞח tutorial, ױࣽ ࢸߨب જ݅.. ӝ৴ݶ न ࢤп ٜযр Ӗ झझ۽ীѱب ةীѱب ؊ ب ؾפ.
ੌࠄ ҃ • ࠶۽Ӓܳ ాೠ ҕਬо ੌ࢚ച: Qiita, Hatena Blog
• ҕࠗഥ: ۽ ױਤ ࣁա. eg. Sibuya.apk, Akiba.swift, ... • Moku-moku meeting: Ӓր п ٬ ݽ 1.5 ~ 2दр ѐ߹ স റ যڃ সਸ ೮ח ی/Ҋ/ઑ ա׃ • Network Party ӝо ҳഅೠ ইఃఫ, పझ ١ ҳੋ ࠗ࠙ী ೧ࢲ धਸ Үജೞח ݽ
None
ୡәࠗఠ Ҋәө নೠ ߊ: 10~15࠙ঀ աݶ 1.5दр زউ ֎ਕ ౭
ழ߁२ • ٣ষ ࠶۽Ӓ https://medium.com/@justfaceit • 5ਘ 5ੌ ҕѐؾפ. •
ݽ߄ੌীࢲ TDD, MVVM, DDD, DI ١ী ೧ࢲ पੋ ղਊਸ ҕਬೞҊ פ.
Chapter 3. MVP & MVVM
MVC is not evil • Modelҗ Viewח ੌઙ ۨҊ ࠶۟:
Model(+ Domain) ҅கীࢲח ࠺ૉפझ ۽ਸ, View ח UI۽ਸ ઁҕ. • Controllerח ۨҊ ࠶۟ ઑ݀ਸ . • Cח যڃ Viewܳ ࠁৈ Ѫੋоܳ Ѿ೧ࢲ Modelীࢲ ߉ ؘఠܳ View۽ ֈѹષ. • ӒܻҊ ী۞ܳ যڌѱ ࠁৈܳ Ѿ೧ࢲ View۽ ֈѹષ
৵ Android MVCח աࢂо? • ݽ߄ੌ ജ҃ ޙઁ: ࠂೠ ࠺زӝ
ܻ, ۄ ࢎ ܻ • উ٘۽٘ ޙઁ: View - Controller ܻ࠙о গݒೞ. • Fat Activity: Activity-Fragmentী ցޖ ݆ ۽ ٜযр. • Unit Testܳ ٜ݅ӝо ݒ ө܂. • Ӓ Ѿҗ == ୨ դҴ • ୭ঈ оةࢿ: ੌ ә߅೧ઉب ܲ ূפযীѱ بਸ ਃೞӝ য۵. ࢸݺೞח ѱ ؊ झۨझۄ.. ୭ ղо ࠊب ഁтܻחؘ যڌѱ ࢸݺਸ.. • ೞաೞա ېझٜ ցޖ ݆ ೡਸ -> ਬࠁࣻ ਊࢿ, ࣻಞࢿ, оةࢿ ١ ݆ ࠗ࠙ীࢲ ஂডೠ ٘о غߡܿ
Model-View-Presenter? • 90֙ ઁউ, 2006֙ Martin Fowler ࣗѐ۽ օܻ ঌ۰
ଵઑ: GUI Architectures https://martinfowler.com/eaaDev/uiArchs.html • ࢎप উ٘۽٘ ୡӝࠗఠ ҳਵ۽ ೧ઉ ৳؍ ইఃఫ • Viewח ࠺ૉפझ ۽ী ҙ۲ػ ࠗ࠙ਸ ҙৈೞ ޅೞب۾ ܻ࠙, Presenter ۽ ֈӣ
Presenter View Model ࢎਊ ੑ۱ਸ ాࠁ ؘఠ јन ਃ ؘఠ
߸҃ ాࠁ ࠭ ߸҃ ਃ
MVP • Fat activity/fragment ߑ • ೠ ೡ(responsibility) ܻ࠙۽
ੋ೧ ࣗझ оةࢿ + ಿ ز߈ ࢚थ • ۖಬ ઓੋ UI ܻח View ଃਵ۽ ܻ࠙೮ӝ ٸޙী Presenterח औѱ పझ ࢿ оמ • Clean Architecture৬ 1:1 mapping оמ. CAܳ Ӓ۽ ਊೞݶ ࢸ҅ ҙ۲ ֢۱ب ୭ࣗച
What is not MVVM? • MVVM ౠ Life Cycle? •
Android Architecture Component ౠੌ ࡺ • Data Binding? - ࣻח ইפա ࢎਊೞݶ ࢤࢿী ഛपೠ ب ؽ • RxMVVM? - द ࣻח ইפ݅.. Rx হח ݒ ࠛಞೣ • ਊযীࢲ য়ח ഒۆ: ViewModel গୡী ੜޅػ ѐ֛? • Modelҗ э ױਤ۽ ଂѐઉ ঋؘ, ాनী ߹ ѱ ٜযоח ഋకۄ য়೧ೡ ࣻ • Viewܳ ਤೠ Model(Entity)ۄח ѐ֛, ױߑೱ presenterۄח ف ѐ ѐ֛ਸ, ViewModelۄח ೞա ܴਵ۽ ыҊ
M-V-ViewModel? • द ݃౯ ۞ Presentation Domain Separation (PDS)о दୡ
• 2004֙ ࣗѐػ Presentation Model ਗഋ • ଵઑ: https://martinfowler.com/eaaDev/PresentationModel.htmlɹ • Microsoftীࢲ ҳഅೣ • ViewModel: Uni-directional Mediator • Presenter৬ ݒ ਬࢎೞա, ViewModel Viewܳ ઁযೞ ঋ • Viewח ViewModelਸ ഐೞغ, Ѿҗח Callback / Observable ഋక۽ ߉
http://kyubid.com/blog/understanding-mvvm-on-android-tutorial-05-introduction-to-reactive-programming-with-rxjava/
MVVM vs MVP: ষ݃о જই, ইࡅо જই? • ل
ഴܯೠ ҳઑ. بੋ ਤח হ • ٮۄࢲ റ ࢸݺب ݒ ࢚ݴ, ۽ં ࢿѺী ٮۄ ܰѱ ߉ইٜৈ ࣻ
MVP ࠺Үਤ • दೞӝо औ. ੌױ ӝઓ ஶ܀۞ ۽ٜਸ ో
refactor ӝמਵ۽ ୶ (extract method)೧ࢲ Presenter۽ ӝח Ѫࠗఠ दೞݶ ؽ • ӝઓ ۽ંܳ Ҋঠ ೞח ҃: Legacy code ࠙ ݆Ѣա, ҳઑ ѐࢶী য दр ݒ ૣ ҃ MVPо ؊ ਬܻ • Rxҕನૐ ח ҃: RxJavaܳ উ ॄب ഴܯೠ ҳઑܳ ٜ݅ ࣻ . (ޛۿ RxJavaܳ ॳݶ ؊ જ ٘ܳ ૢ ࣻ )
MVVMח? • ୡӝ ੑ߷ ࠙ݺ ӝઓ ѐߊ ѐ֛ী ࠺೧
ಁ۞ ജ ਃ. بੑ ୡӝূ যו ب ా хࣻ೧ঠೣ. • View ࢚క ҙܻо ࠂೠ ҃ (== ࠗ࠙ ࠂೠ জ) ViewModelীࢲ ܻо ؊ োझۣ. ഥࢎীࢲ MVVMਸ ݆ٜ ਊೞח ਬ • Android Architecture Component റҟ ബҗ LifeCycle - ViewModel - LiveData - Room ઑ ઁب ݆ • Cross Platform ҳഅী ખ ؊ ਬܻ Data Binding, LiveData, Roomਸ ನӝೡ ҃, Kotlinਸ Swift۽ ӝח Ѫ݅ਵ۽ب View ৻ ࣗझ 70% ࢚ਸ ࢎਊ оמ
MVVM - MVP ҕా • ѐߊ ࣘبо ݻ ߓח
ࡈۄ (: ѐੋର . ୡӝ 2~3р ѐߊ ࣘبח ݻ ߓח ו۰ ࣻ ) • ٘ ߸҃ী ೠ ف۰ (Ѣ) হয. • ٸ۰Ҋ र ӝദо әѺೠ ࢎন ߸҃ਸ ਃ೧ب ਓਵݶࢲ ೡ ࣻ • 1֙ ٍী द ٘ܳ ࠊب द য٣ܳ Ҋঠೞח ঌইରܾ ࣻ • ܲ ূפযীѱ ٘ܳ ࠁৈب ଃ౹ܻ ঋח
None
৴ƀ ݈ જؘ? ܻب ઁ ҍ गಌ ѐߊ غחѹ?
Ӓۧѱ ࢤп೮ਵա.. Ӓ۽ࠗఠ ݻ ѐਘ റ..
None
۽ં ࢎૉо ழݶࢲ.. ٘о ӝ৬ח ׳ܻ ࠙೧Ҋ . ରۄܻ
ށۋਵݶ જওਸ Ѧ.. Ҋ݅ ט.
Ӓېࢲ ળ࠺೧ࠌणפ.
Chapter 4. MVP / MVVM at Scale
1. Fat Presenter • ઁח Presenterо ցޖ ݆ਸ ੌਸ ೠ!
• పझ ாझܳ ٜ݅ӝо য۰ਕ • ࠁח Ӓېب ի݅.. ৈ ٘о ࠙ೞ. • ݃ Activity Manager э ѱ ೞա טযաӝ݅ ೠ ו՝? • ػ ਗੋ ೞաח Presenterܳ View৬ ݺഛ ܻ࠙ೞ ঋ Ѫ
೧Ѿ଼ • ѱ Ҋೞ ঋইب View৬ Presenterܳ ੜޅ ҳഅೞӝ য۵ب۾
ೞח о ਃ • Viewח ߮ܳ ߊࢤदఃҊ, UIܳ Ӓ۰ח ೡ݅ਸ , ࠺ૉפझ ۽ ա ݽ؛ ՙযٜ ࣻ ח ৈܳ ରױ • Presenterо View ࣁࠗ ࢎ೦ਸ ঌ ࣻ হب۾, Pח Viewܳ ୶࢚ച दఅ ഋక ۽݅ ଵઑೞب۾ ݅ٝ
• View Interfaceܳ ాೠ ܻ࠙ • Mock Objectܳ ాೠ Unit
Testо ݒ एਕ • Presenterח ࠺ૉפझ ۽ ܻ݅ • Viewח Ӓܻӝ݅ • ؘఠ ܻ࠙ب ೣԋ ܞ: Viewח Modelী ೧ ঌ ਃب, ঌ ࣻب হѱ ؽ • ਃೠ ҃, Presenterө Interfaceച दఇ MVP: Contractor Pattern
• ژ द Martin Fowlerо ೠ ѐ֛ • ଵઑ: https://martinfowler.com/eaaDev/PassiveScreen.html
• Fluxীࢲח Dumb Client, Clean Architectureীࢶ Humble ObjectۄҊ ܴࠗ • Viewח (ۖಬ ઓੋ) Ӓܻӝ ৻ীח ইޖѪب ঌ ࣻ হب۾ ೣ • ۽Ӓੋ ചݶۄݶ, അ ࢲߡ ࣘ ੋ ৈࠗ, ۽Ӓੋ ࢿҕ ৈࠗ ١ઑରب View о ݽܰب۾.. -> isLoadingী true ߮о য়ݶ द, ী۞ ী ࡸ۰ ޙ о য়ݶ दೡ ࡺ 2. MVVM Best Practice: Passive View
• ޥо ࢚ೠؘ? • Lighter View, Fatter ViewModel ->
Ӓ۞ݶ ViewModel ؊ Ѣ೧ח ؘ ҡଳо?? • بػ Ѿҗ - MVVM ؊ ա ҳઑ۽ оӝ ਤೠ ਃೠ оҮ যۄ?
– Nataliya Patsovska “MVVM is not an architecture.”
3. ࠺ૉפझ ۽ ࠺ച • Presenterա ViewModel بݫੋ ۽, хೡ
ࣻ হח ӝо غח ࢚ട ৡ. • о જ ೧Ѿ଼ Single Responsibility Principle ਊ • ݽߧ উ : ߄۽ Clean Architecture! • Presenterীࢲ بݫੋ ۽ਸ ܻ࠙ оמ • Data ҅க ࣁ࠙ചܳ ా೧ ؊ ୶࢚ചػ ഋక ҳઑ оמ
https://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc
[ઁ ٘]
None
• Clean Architecutre : Single Responsibility Principle पೠ ׳ࢿ •
Presenter / Domain / Data ҅க ܻ࠙۽ ੋ೧ ۽ ܴ ੌݾਃো ೧ -> оةࢿ ә࢚थ • ౠ ېझо ࠺೧ח Ѫਸ ߑ • п layerр ҳ࠙ ݺഛೞ۽, п ೱ ߧਤب ݺഛ • ױ, ېझ әѺ ૐо -> ೠ ߣী ҳഅೞ۰ ೞݶ ѐߊࣘب ೞ৬ ߡӒ নਸ ঠӝೡ ࣻب ଵ औભ?
• 6ѐ ېझ, 2ѐ ੋఠಕझ.. (3ѐ ࢤۚ) • Incremental Improvement
• Clean Architectureী ࣼೞ ঋѢա ࠂೠ दझమ ࢸ҅ ҃ হח ҃ , ݽٚ Ѧ ٮۄೡ ਃח হ • ੌױ ܻઃప࣌ ۽ ܻചࠗఠ द • View - ViewModel/Presenter - Repository - Model(Entity) • بݫੋ / ؘఠ ۽ ਃ ೧ ਵ۽ ೞח Ѫ ܻ
Google Guide to App Architecture
Ӓېب.. જӟ ೠؘ.. • ېझо ցޖ ݆! • ੋ ҳઑܳ
ы୶ח ؘী ঋ दр ٜযр • Ӓ۞ա જ ߑߨ..! • ݽٚ Ѧ زਵ۽ ٜ݅য ח ۞Ӓੋ ! https://github.com/kiuchikeisuke/Android-Studio-CleanArchitecture- template-forKotlin • RxJava, Dagger, Retrofit, AAC, Presenter/ViewModel ٘ө ކٶ ݅ ٜয ષ • Swagger ਗਵ۽ REST API call ੋఠಕझب زਵ۽ ٜ݅য ષ
3. ݻ о դઁٜ.. • ҳઑ ୍ ޙઁ: Presenter ࠺ૉפझ
۽җ, Use Case ࠺ૉפझ ۽ ޤо ౣܽо? • بݫੋ ۽ Use Caseী ٜযр • ࢎস ࠗࢲ ࢎۈٜب ঌҊ যঠ ೞח ۽ۄݶ, بݫੋ ۽
https://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc ࠂण
RecyclerView in MVP • Presenter۽ ReclyerView - Adapterܳ যڌѱ ೧ঠೞחоח
ݒ ө۽ ޙઁ.. হणפ 1. Activity/Fragmentо (Presenter ݺ۸ਸ ߉ই) Adapterܳ ઁয - ױࣽ ೠ ಁఢ ܻझীח ബҗ. Groupie э ۄ࠳۞ܻܳ ࢎਊೞݶ ؊ ബҗ 2. Adapter৬ ݒೝغח Presenterܳ ҳഅ 3. ѐ߹ itemҗ пп 1:1 ݒೝغח Presenterܳ ҳഅ
RecyclerView in MVVM • Presenterী ࠺೧ࢶ ױࣽೠ ޙઁ. Data bindingਵ۽
Ӓ۽ ViewModel োѾ оמ • ࠂೠ ҃о ইפۄݶ Adapterী ViewModel োѾ • ࠂೞݶ п Itemҗ ݒೝغח ViewModelਸ ҳഅ • ҃ ViewModel Viewܳ ਤ೧ оҕػ Modelӝ ٸޙী যڃ ী ࢲ ೠ ViewModel.. • ࢎ೦: AACܳ ਊ೧ small ViewModelਸ ࢤࢿೡ ҃, providerী ۄ ఠܳ ߹ب ೧ঠ ೣ. ରۄܻ ࢚ਤ ViewModel ࢤࢿೞח ѱ ؊ જਸ ࣻ ب
୭Ӕ ҃ • ઑѤ: 6ѐ ݽ߄ੌ ࢲ࠺झ(ب 12ѐ জ)о 100%
৻ ѐߊ۽ ҳഅػ জਵ ۽ ࢲ࠺झ غҊ ח ࢚ട • җઁ: 3ѐ ࢲ࠺झ(6ѐ জ)ٜਸ 7ѐਘ ղ۽ ܻ • য۰ : ࠺ૉפझ ҙীࢶ জ ҳઑ ѐࢶ оо হ. ઁա Ӓۧ٠ ޙઁח ࢜۽ ӝמٜਸ ݃ա ࡅܲ ࣘب۽ ֍וջ.. • নզ Ѩ: ߬թ ѐߊ ઑ - ࣚ ࡅؘܲ.. ଵ ࡅؘܲ.. • নզ Ѩ 2: ঠӔ Ә -> Ҋب۽ ബਯੋ স ਃ
әೠ ੌ әೞ ঋ ੌ ਃೠ ੌ ো.. न ӝמ
ҳഅ ߡӒ ࣻ + জ উച Java -> Kotlin ߸ജ ViewModel or Presenter ജ য়ېػ ۄ࠳۞ܻ тইఋӝ ਃೞ ঋ ੌ пઙ ഥ ଵࢳ ࢚ೠ ߸ࣻݺ, ݫࣗ٘ݺ ߸҃ ٜৈॳӝ ߸҃ ӝఋ झఋੌ ࣻ
Ѿҗ • 1ߣ૩ ࢲ࠺झ: ߬࠺ दఠ জ • ݶੋ ҳઑ
ѐࢶ ӭՔೞѱ ನӝ. बয iOSח ӝઓ ҳઑܳ ৮ ਬೠ ۽ नӝ מ݅ ୶о೮. Rx ࢎਊب ನӝ. न API Callback ܻܳ ӭՔೞѱ ೡ ࣻ ח ҕా ېझ ҳഅ೧ࢲ উࢿ/ࢤࢿਸ Ҋ • উ٘۽٘ח о ਃೠ ࣁ ѐ Fragment݅ MVP۽ ࣻ. աݠח नӏ ചݶ݅ MVP۽ ҳഅ • ݽٚ ࣗझܳ Kotlinਵ۽ ز߸ജਸ ਊ೧ࢲ ߸ജೞغ, ੌࠗ ޙઁ ࣗח ٘(Non- null ܻ)ܳ ઁ৻ೞҌ ۨѢद ٘ܳ ޖܻೞѱ Kotlinझ۞ ٘۽ Ҋ۰Ҋ ೞח ঋ • AAC Life Cycle ӝמਸ ਊೞӝ ਤ೧ ViewModelਸ ࢚ࣘ ߉ই Presenter ҳഅ • 7 to 9 principle ࣁ. য়റ 7~9दী݅ restructuring / refactoring স
Ѿҗ • 1ߣ૩ ࢲ࠺झ: ߬࠺ दఠ জ (҅ࣘ) • ӝઓ
Challengingೠ ੌਸ, ޖ۰ 3ੌ ױ୷೧ࢲ োղ ܾܻૉ ࢿҕ • ѱо दܳ ౣ খفҊ CPO۽ࠗఠ цझۣѱ оੑ ࢎਊܳ ਤೠ ѱझ ݽ٘ܳ ٜ݅য ׳ۄח ਃਸ ߉ -> ਗې ഥਗ ਊਵ۽݅ ٣ੋ غ؍ জۄ ࢚ೠ ҕࢎਵա.. 1ੌ݅ী ৮ܐ (ҳഅ 3दр, ٣ߡӦ/৻ࢎ೦ ܻ 5दр)
Ѿҗ • 2ߣ૩ ࢲ࠺झ: झ জ • উ٘۽٘, iOS ݽف
MVVM ਊ • ۖಬ ݀ࢿਸ ਤ೧ RxJava/RxSwift - Realm ࢎਊ, Data Binding ࢎਊೞ ঋ • ଵҊ: 4 Reasons I’m not Using Android Data Binding https://medium.com/@Miqubel/4-reasons-im-not-using-android-data- binding-e62127c2650c (ח ݽف زೞח ঋणפ݅..) • 3ߣ૩ ࢲ࠺झ: ҳੋ/ҳ জ • ઃ ҕ ݽ٘: 2ߣ૩ীࢲ ݅ٚ ҳઑܳ Ӓ۽ ഝਊ೧ࢲ ନযղҊ
хࢎפ!
• ਗ झணۄ ӝ߈ ಽ झఖ ূפয • ઑѤ •
҃۱, ۱ ޖҙ • ߔূ٘/ݽ߄ੌ/ۿূ٘ ١ ࠙ঠ ޖҙ • ୡ١Ү 3֙ ࣻળ ੌࠄয • ࠙ঠ, ѐߊযח оܻ ঋ: о न ח য ٬ प۱݅ ࠆ (য়࠘ ٬ పझ ) • ઁѱ ݫੌ۽ CV दݶ ࢚೧٘݀פ. Nextbeatח ҳੋ! • ठۄ٘ ݂: https://speakerdeck.com/saryong/ mvvm-iyagi-droidknight-2018 • ࠶۽Ӓ ݂ (5/5): https://medium.com/@justfaceit • Email:
[email protected]