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
860
(Unofficial) Guide to App Architecture Guide Vol. 2 - DroidKaigi 2023
saryong
0
280
[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
200
Google의 개발문화와 프로세스(2) - Feedback & Code Review
saryong
0
690
Google의 개발문화와 프로세스(1): Scale & Efficiency / Testing
saryong
2
580
한때 개발을 접었던 창업자 출신 엔지니어를 구글로 인도해준 어떤 방법론
saryong
1
580
Other Decks in Programming
See All in Programming
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
170
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
460
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
180
AHC070解法紹介
eijirou
0
110
自分的「カンファレンスの楽しみ方」
syumai
0
200
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
200
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
230
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
780
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
540
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
150
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Everyday Curiosity
cassininazir
0
320
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
390
AI: The stuff that nobody shows you
jnunemaker
PRO
9
990
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
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]