dev/aos

[AOS] ViewModel 생성하기

캄춰 2023. 10. 14. 10:14
728x90
반응형

[사설]

개발하는 것에 너무 무서워하지 않았으면 좋겠다.

초반 나도 MVVM, ViewModel, Coroutine... 등 갑작스레 다가오는 여러 용어와 방법들이 나를 당혹케 했다.

 

단순히 좀 더 개발 할 때 보기 쉽게, 만들기 좋게, 일 뿐이다.

ViewModel의 경우도 단순하게 생각하면 된다.

 

UI를 다루는 MainActivity가 있고, 그 안에서 일어나는 일들을 ViewModel에서 관리 해주는 것 뿐이다.

다시 한 번 말하지만 너무 무서워하지 않았으면 좋겠다.

 


 

ViewModel을 생성하는데 ViewModelProvider를 사용하는 건 생명주기를 함께하기 위해서라고 보면 쉽다.

바로 ViewModelProvider클래스를 사용해서 생성해주는 방법도 있으며,

여러 ViewModel을 사용할 경우 ViewModelFactory클래스를 따로 만들어주어 사용하는 방법이 있다.

 

 

1. 단순하게 생성

onCreate 생명주기 함수에 ViewModel객체 초기화

    private lateinit var mainViewModel:MainViewModel
    
        override fun onCreate(savedInstanceState: Bundle?) {
        	...
            mainViewModel = ViewModelProvider(this)[MainViewModel::class.java]
        }

 

 

 

2. ViewModelFactory사용

: 1번 예제처럼 'lateinit'을 사용하여 나중에 초기화 하는 방법도 있지만

: 'by lazy'를 사용하여 객체가 사용 될 때 초기화 하는 방법도 있다. (상황에 맞추어 사용한다)

class ViewModelFactory() : ViewModelProvider.Factory {
    override fun <T : ViewModel> create(modelClass: Class<T>): T {
        return if (modelClass.isAssignableFrom(MainViewModel::class.java)) {
            MainViewModel() as T
        } else {
            throw IllegalArgumentException()
        }
    }
}
    private val vm: MainViewModel by lazy {
        val factory = ViewModelFactory(context, getPreferences(Context.MODE_PRIVATE))
        ViewModelProvider(this, factory)[MainViewModel::class.java]
    }

 

 

 

이후, ViewModel 객체를 생성한 클래스에서 상황에 맞추어 데이터를 Observing하여 활용할 수 있다.

728x90
반응형