반응형
역할 : View에 필요한 데이터를 담당하고, 비즈니스 로직을 담당해 데이터를 처리한다.
즉, View와 Model 사이에 위치한다고 볼 수 있다.
애초에 나온 이유는 view와 model간의 결합도를 낮추기 위함으로,
ViewModel이 View를 참조하면 의미가 없어진다,
따라서, ViewModel은 View를 참조하면 않된다.
또한, view는 model이 아닌 viewmodel을 통해서만 data에 접근가능해야 한다.
AAC ViewModel을 사용했을 때, MVVM 구현에 어떤 이득이?
수명주기를 고려할 수 있기 때문,
class ChronometerViewModel : ViewModel(){
private var startTime: Long = 0
fun getStartTime(): Long = startTime
fun setStartTime(){
if(startTime <= 0) {
this.startTime = SystemClock.elapsedRealtime()
}
}
}
→Activity가 data에 대해 알 필요도, 접근할 필요도 없도록 ViewModel이 모두 작업
Activity는 해당 작업을 하는 함수를 호출만 하면 된다.
class MainActivity : AppCompatActivity() {
private lateinit var chronometerViewModel: ChronometerViewModel
private lateinit var binding: ActivityMainBinding
private lateinit var chronometer: Chronometer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
chronometer = binding.ch
chronometerViewModel = ViewModelProvider(this).get(ChronometerViewModel::class.java)
showChronometer()
}
private fun showChronometer(){
chronometerViewModel.setStartTime()
chronometer.base = chronometerViewModel.getStartTime()
chronometer.start()
}
}
→ ViewBinding만을 사용해 작업
Activity는 Chronometer의 시간을 설정하고, 시작할 뿐,
data에 관련된 일체의 작업도 하지 않는다.
반응형
'IDE & Framework > Android' 카테고리의 다른 글
[Kotiln] 실행아이콘이 없는, 런처가 없는 앱 만들기 (0) | 2021.11.02 |
---|---|
[Kotlin] ContentResolver 기본 : 통화내역(Call log) 조회 (0) | 2021.11.02 |
AAC MVVM - (2)Data binding (0) | 2021.10.17 |
AAC MVVM - (1)Live Data (0) | 2021.10.17 |
View binding 사용해보기 (0) | 2021.10.17 |