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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
890
(Unofficial) Guide to App Architecture Guide Vol. 2 - DroidKaigi 2023
saryong
0
290
[EN] (Unofficial) Guide to App Architecture Guide Vol 1 - DroidKaigi 2022
saryong
0
560
[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
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2k
AWSに止められる覚悟してますか?
morizo_1984
2
530
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
540
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
380
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
630
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
ActionController meets Protocol Buffers
sorah
0
520
R8 の設定見直しでアプリサイズ削減
andpad
0
220
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
420
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
500
Speed Design
sergeychernyshev
33
2.2k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
480
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Why Our Code Smells
bkeepers
PRO
340
58k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
How to Ace a Technical Interview
jacobian
280
24k
Utilizing Notion as your number one productivity tool
mfonobong
4
620
Design in an AI World
tapps
1
350
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]