티스토리 뷰

BaseActivity

  • 개발을 하다보면 모든 Activity에서 공통적으로 만들어줘야하는 변수들이 있다 
  • 이 변수들을 파일마다 만들어주는 번거로운 과정을 생략하기 위해서 Base 패키지에 필수적인 내용이 들어있는 파일을 만들어놓고, Activity 등에서 해당 파일을 상속하여 사용한다

BaseActivity.kt

  • 추상클래스로 정의되어있다
  • abstract로 정의된 변수인 layoutResID와 viewModel은 상속받은 activity에서 반드시 재정의 해줘야한다
  • layoutResID는 setContentView로 호출할 Layout 파일을 말한다
  • viewModel은 Activity에서 viewModel로 쓸 변수이다
abstract class BaseActivity<T : ViewDataBinding, R : BaseViewModel> : AppCompatActivity() {
    lateinit var viewDataBinding: T

    abstract val layoutResID: Int
    abstract val viewModel: R

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 초기화된 layoutResId로 databinding 객체 생성
        viewDataBinding = DataBindingUtil.setContentView(this, layoutResID)
        // live data를 사용하기 위해 해줘야함
        viewDataBinding.lifecycleOwner = this@BaseActivity
    }
}

MainActivity.kt

  • BaseActivity를 상속받아 구현한다
  • layoutResID 객체를 정의하면 BaseActivity에서 만들어지는 viewDataBinding 객체를 바로 사용할 수 있다
class MainActivity : BaseActivity<ActivityMainBinding, MainViewModel>() {

    // databinding객체(viewDataBinding)와 viewModel객체(viewModel) 생성
    override val layoutResID: Int = R.layout.activity_main // 레이아웃 연결
    override val viewModel: MainViewModel = MainViewModel by viewModel() // 의존성 주입

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }
}

BaseViewModel

  • BaseActivity와 마찬가지로 ViewModel에서 기본적으로 필요한 변수와 함수를 정의한 파일이다

BaseViewModel.kt

  • 상속이 가능한 클래스로 만들어주기 위해 open 키워드를 사용했다
  • addDisposable()은 RxJava로 Obsevable을 Observing 할 때 사용할 함수이다
  • onCleared()는 Observing을 그만두게 될 때(뷰가 사라질 때) 메모리 누수를 방지하기 위해 compositeDisposable을 비우는 함수이다
open class BaseViewModel : ViewModel(){

    private val compositeDisposable = CompositeDisposable()

    fun addDisposable(disposable: Disposable) {
        compositeDisposable.add(disposable)
    }

    override fun onCleared() {
        compositeDisposable.clear()
        super.onCleared()
    }
}

MainViewModel.kt

  • BaseViewModel을 상속받았기 때문에 MainViewModel 클래스에서도 BaseViewModel에 있는 함수들을 사용할 수 있다 
  • data를 가져오는 함수에서 addDisposable() 함수로 repository의 통신함수를 사용해 구현하면 된다
class MainViewModel : BaseViewModel(){

    fun getData(){
        addDisposable()
    }

    init {
        //초기화 블럭
    }
}

 

🕊참고자료

시연이의 머리🤓

 

Android Kotlin MVVM패턴으로 간단한 검색 앱 만들기 - 1. BaseView, BaseViewModel을 작성하여 MVVM의 토대 만들기

MVVM 패턴과 Kotlin으로 간단한 앱을 만드는 것에 대해 글을 써보려고 합니다. 저도 정리를 좀 하고, 다른 분들도 도움이 좀 되셨으면 하는 의미에서.. 일단 어떤 앱을 만들고자 하냐면, 간단하게 카카오 Api로 이..

deque.tistory.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함