๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android 82

[Android] Fragment์˜ ์ƒ๋ช…์ฃผ๊ธฐ

#1 ์ด์ „ ๊ธ€ [Android] Activity์˜ ์ƒ๋ช…์ฃผ๊ธฐ#1 Android Application์˜ ์‹œ์ž‘ (AndroidManifext.xml) ... ์šฐ๋ฆฌ๊ฐ€ ์•ฑ ์•„์ด์ฝ˜์„ ๋ˆ„๋ฅด๋ฉด, ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ์•ฑ์˜ Launcher Activity๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. AndroidManifext.xml์˜ ๋“ฑ๋ก๋œ ์•กํ‹ฐ๋น„ํ‹ฐ ์ค‘์—์„œ ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  kenel.tistory.comํ”„๋ž˜๊ทธ๋จผํŠธ๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ๊ฐ€์žฅ ์ฃผ์š”ํ•œ ์ฐจ์ด์ ์€ ํ™€๋กœ ์„ค ์ˆ˜ ์—†์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ ์•กํ‹ฐ๋น„ํ‹ฐ๋‚˜ ๋˜ ๋‹ค๋ฅธ ํ”„๋ž˜๊ทธ๋จผํŠธ์— ์ข…์†๋˜์–ด ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ”„๋ž˜๊ทธ๋จผํŠธ๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ์ฒ˜๋Ÿผ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ข…์†๋œ ์•กํ‹ฐ๋น„ํ‹ฐ๋‚˜ ๋˜ ๋‹ค๋ฅธ ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์— ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ๋„ ํ•œ๋‹ค. ์ด์ „ ๊ธ€์— ์ด์–ด ์ด๋ฒˆ์—๋Š” Fragment์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์‚ดํŽด๋ณธ๋‹ค. #2 Fragment์˜ ..

[Android] Activity์˜ ์ƒ๋ช…์ฃผ๊ธฐ

#1 Android Application์˜ ์‹œ์ž‘ (AndroidManifext.xml)                                                                                    ...    ์šฐ๋ฆฌ๊ฐ€ ์•ฑ ์•„์ด์ฝ˜์„ ๋ˆ„๋ฅด๋ฉด, ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ์•ฑ์˜ Launcher Activity๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. AndroidManifext.xml์˜ ๋“ฑ๋ก๋œ ์•กํ‹ฐ๋น„ํ‹ฐ ์ค‘์—์„œ ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Activity๊ฐ€ Launcher Activity๋กœ ์„ค์ •๋œ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” Launcher Activity๊ฐ€ ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•„๋Š” MainActivity๋‹ค. ์ด Launcher Activity๋ผ๋Š” ์ง„์ž…์ ์„ ํ†ตํ•ด ์•ฑ์ด ์‹คํ–‰๋˜๋ฉด, ๋น„๋กœ์†Œ ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ์ƒ๋ช…..

[Android] MVVM ๊ตฌ์กฐ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

#1 ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์˜ '์ „ํ†ต์ ์ธ' ๋ฐฉ์‹ vs MVVM ํŒจํ„ด#1-1 ๋„์‹๋„์™€ ์ข…์†์„ฑํ™”์‚ดํ‘œ๋Š” ํด๋ž˜์Šค ๊ฐ„์˜ ์ข…์†์„ฑ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, View๋Š” ViewModel์— ์ข…์†๋œ๋‹ค. ์ข…์†์˜ ์‚ฌ์ „์  ์˜๋ฏธ๋Š” '์ž์ฃผ์„ฑ์ด ์—†์ด ์ฃผ๊ฐ€ ๋˜๋Š” ๊ฒƒ์— ๋”ธ๋ ค ๋ถ™์Œ'์ด๋‹ค. ์ข…์†์€ '์•Œ์•„์•ผ ํ•œ๋‹ค'๋ผ๋Š” ๋ง๋กœ๋„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ View๋Š” ViewModel์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค. ๋ฐ˜๋ฉด, ViewModel์€ View๋ฅผ ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ViewModel์„ ์„ค๊ณ„ํ•  ๋• View์—์„œ ๋ญ˜ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ์ „ํ˜€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค (๋Œ€์‹ , ViewModel์€ Model์— ๋Œ€ํ•ด ์ข…์†์ ์ด๋ฏ€๋กœ Model๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค). View๋ฅผ ์„ค๊ณ„ํ•  ๋• ViewModel์„ ์•Œ์•„์•ผ ํ•œ๋‹ค. '์•Œ์•„์•ผ ํ•˜๋Š” ์ชฝ'์—์„œ '๋ชฐ๋ผ๋„ ๋˜๋Š” ์ชฝ'์œผ๋กœ ํ™”์‚ดํ‘œ๋ฅผ ..

[Android] LiveData - ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์˜ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•

#1 ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ#1-1 ๋‹จ๋ฐฉํ–ฅ๊ณผ ์–‘๋ฐฉํ–ฅ์ง€๊ธˆ๊นŒ์ง€ ํ•ด์˜จ Data Binding์€ ๋‹จ๋ฐฉํ–ฅ(One Way) ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด์—ˆ๋‹ค. Model ๋˜๋Š” ViewModel์—์„œ View๋กœ ๊ฐ€๋Š” ํ๋ฆ„์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋œ๋‹ค. ์—ญ์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ์—ญ์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ๊ผญ ๋‚˜์œ ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค. ๋งˆ์น˜ ์ธํ„ฐ๋„ท ์‡ผํ•‘๋ชฐ์—์„œ ์–ด๋–ค ๋ฌผ๊ฑด์˜ ํ‘œ์‹œ๋œ ๊ฐ€๊ฒฉ์„, ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ์„œ๋ฒ„์— ์ €์žฅ๋œ ์‹ค์ œ ๊ฐ€๊ฒฉ์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. ๋งŒ์— ํ•˜๋‚˜ ๋ณ€ํ•˜๋Š” ์ผ๋„ ์—†์–ด์•ผํ•˜๊ณ  ๋ง์ด๋‹ค. #1-2 ์ˆ˜์ •ํ•  ์ƒ˜ํ”Œ ์•ฑ [Android] LiveData - ์•”์‹œ์ ์œผ๋กœ '๊ด€์ฐฐ'ํ•˜๊ธฐ#1 ViewModel ์†์— LiveData๊ฐ€ ์žˆ๋Š” ์ƒ˜ํ”Œ ์•ฑ [Android] ViewModel - View์— ๊ฐ์ฒด(ViewModel) ์ „๋‹ฌ #1 ๊ฐœ์š” #..

[Android] LiveData - ์•”์‹œ์ ์œผ๋กœ '๊ด€์ฐฐ'ํ•˜๊ธฐ

#1 ViewModel ์†์— LiveData๊ฐ€ ์žˆ๋Š” ์ƒ˜ํ”Œ ์•ฑ [Android] ViewModel - View์— ๊ฐ์ฒด(ViewModel) ์ „๋‹ฌ#1 ๊ฐœ์š” #1-1 Data Binding๊ณผ ViewModel [Android] Data Binding - View์— ๊ฐ์ฒด ์ „๋‹ฌ #1 ๊ฐ์ฒด ์ „๋‹ฌ์˜ ํ•„์š”์„ฑ #1-1 ์ด์ „ ๊ธ€ Data Binding - ๊ธฐ์ดˆ #1 ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ ์ „ #1-1 ์˜ˆ์‹œ ์•ฑ ์œ„๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์•ฑ์ด ์žˆ๋‹ค. Button์„kenel.tistory.com์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ์™„์„ฑ๋œ ์•ฑ์„ ํ† ๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค. #2 ๋ช…์‹œ์  LiveData.observe() [Android] LiveData - ๊ธฐ์ดˆ#1 ๊ฐœ์š” #1-1 LiveData LiveData ๊ฐœ์š” | Android ๊ฐœ๋ฐœ์ž | Android Develo..

[Android] ViewModel - View์— ๊ฐ์ฒด(ViewModel) ์ „๋‹ฌ

#1 ๊ฐœ์š”#1-1 Data Binding๊ณผ ViewModel [Android] Data Binding - View์— ๊ฐ์ฒด ์ „๋‹ฌ#1 ๊ฐ์ฒด ์ „๋‹ฌ์˜ ํ•„์š”์„ฑ #1-1 ์ด์ „ ๊ธ€ Data Binding - ๊ธฐ์ดˆ #1 ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ ์ „ #1-1 ์˜ˆ์‹œ ์•ฑ ์œ„๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์•ฑ์ด ์žˆ๋‹ค. Button์„ ๋ˆ„๋ฅด๋ฉด, EditText์˜ text๊ฐ€ ๋ฐ”๋กœ ์œ„์— ์žˆ๋Š” TextView์˜ text์— ๋Œ€์ž…๋œ๋‹ค. ์ดkenel.tistory.com๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ด์šฉํ•ด View์— ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ViewModel์˜ ๊ฐ์ฒด ๋˜ํ•œ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. #1-2 ViewModel์ด ์“ฐ์ธ ์ƒ˜ํ”Œ ์•ฑ [Android] LiveData - ๊ธฐ์ดˆ#1 ๊ฐœ์š” #1-1 LiveData LiveData ๊ฐœ์š” | Android..

[Android] LiveData - ๊ธฐ์ดˆ

#1 ๊ฐœ์š”#1-1 LiveData LiveData ๊ฐœ์š”  |  Android ๊ฐœ๋ฐœ์ž  |  Android DevelopersLiveData๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ธ์‹ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.developer.android.comLiveData. ๋ฌธ์„œ์ ์ธ ์ •์˜๋Š” Data์˜ ๋ณ€๊ฒฝ์„ ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ™€๋” ํด๋ž˜์Šค๊ณ , ๋ง ๊ทธ๋Œ€๋กœ ํ•ด์„ํ•˜๋ฉด ์‚ด์•„์žˆ๋Š”(live) ๋ฐ์ดํ„ฐ(data)๋‹ค. Activity, Fragment, Service์— ์žˆ๋Š” Data, ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ๋ณ€์ˆ˜ A๊ฐ€ ์žˆ๊ณ  ๊ทธ A๋ฅผ ์–ด๋–ค TextView์— ํ‘œ์‹œํ•ด๋†“์€ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด ๋ณด์ž. A์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด, TextView์— ๋ณ€๊ฒฝ๋œ A๊ฐ’์„ ๋‹ค์‹œ ํ• ๋‹นํ•ด์•ผํ•œ๋‹ค. LiveData๋Š” ๊ทธ ๊ท€์ฐฎ์€ ํ• ๋‹น ๊ณผ์ •์„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. L..

[Android] ViewModel - ๋ทฐ ๋ชจ๋ธ์— ์ธ์ž(Argument) ์ „๋‹ฌ (ViewModelFactory)

#1 ViewModelProvider ํด๋ž˜์Šค ๋ถ„์„#1-1 ์ˆ˜์ •ํ•  ์ƒ˜ํ”Œ ์•ฑ [Android] View Model - ๊ธฐ์ดˆ#1 View Model์˜ ํ•„์š”์„ฑ#1-1 ์˜ˆ์ œ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด TextView์˜ text๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์˜ˆ์‹œ ์•ฑ์ด๋‹ค. MainActivity.kt ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. // package com.example.viewmodelbasics import androidx.appcompat.app.AppCompatActivity import androkenel.tistory.com์œ„ ๊ฒŒ์‹œ๊ธ€์˜ '์™„์„ฑ๋œ ์•ฑ'์„ ์ˆ˜์ •ํ•ด์„œ, ViewModel ํด๋ž˜์Šค๊ฐ€ ์ธ์ž(Argument)๋ฅผ ๋ฐ›๊ฒŒ ๋งŒ๋“ค์–ด๋ณธ๋‹ค. ๊ทธ๋ƒฅ class sampleViewModel(args: Int) : ViewModel() { ... }์™€ ๊ฐ™์ด ..

[Android] ViewModel - ๊ธฐ์ดˆ

#1 View Model์˜ ํ•„์š”์„ฑ#1-1 ์˜ˆ์ œ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด TextView์˜ text๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์˜ˆ์‹œ ์•ฑ์ด๋‹ค. MainActivity.kt ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. // package com.example.viewmodelbasicsimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport androidx.databinding.DataBindingUtilimport com.example.viewmodelbasics.databinding.ActivityMainBindingclass MainActivity : AppCompatActivity() {    private lateinit var binding: ActivityMai..

[Android] Data Binding - View์— ๊ฐ์ฒด ์ „๋‹ฌ

#1 ๊ฐ์ฒด ์ „๋‹ฌ์˜ ํ•„์š”์„ฑ#1-1 ์ด์ „ ๊ธ€ Data Binding - ๊ธฐ์ดˆ#1 ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ ์ „ #1-1 ์˜ˆ์‹œ ์•ฑ ์œ„๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์•ฑ์ด ์žˆ๋‹ค. Button์„ ๋ˆ„๋ฅด๋ฉด, EditText์˜ text๊ฐ€ ๋ฐ”๋กœ ์œ„์— ์žˆ๋Š” TextView์˜ text์— ๋Œ€์ž…๋œ๋‹ค. ์ด ์•ฑ์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. #1-2 activity_main.xml #1-3 Mainkenel.tistory.com์ด์ „ ๊ธ€์—์„œ ์ด์–ด์ง„๋‹ค. ์ด์ „ ๊ธ€์—์„ , ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด View์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ๋ฐ˜๋Œ€๋กœ View์—๊ฒŒ ๊ฐ์ฒด๋ฅผ ๋ณด๋‚ธ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ ์•ฑ์„ ๋ณด์ž.  #1-2 ์˜ˆ์‹œ ์•ฑ์ด ์•ฑ์€ ์–ด๋–ค ์ฑ… ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ์•ฑ์ด๋‹ค. ํ™”๋ฉด ์•„๋ž˜์— ์žˆ๋Š” ๋ฒ„ํŠผ๋“ค์„ ๋ˆ„๋ฅด๋ฉด ํ™”๋ฉด ์œ„ ์ชฝ์˜ TextView๋“ค์˜ ..