코틀린 MVP 패턴 기본
코틀린 MVP 패턴 적용 구현.
/**
* 액티비티 상속 클래스
*/
abstract class BaseActivity : AppCompatActivity() {
/**레이아웃 뷰 추상화 등록*/
protected abstract val layoutId: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(layoutId)
}
}
// Contract.view 에 인터페이스를 받음.
class MainActivity : BaseActivity(), MainActivityContract.View {
//BaseActivity에서 상속받은 변수.
override val layoutId = R.layout.activity_main
//뷰에 지정한 프레젠터 등록.
override val presenter: MainActivityContract.Present = MainActivityPresenter()
//뷰에서 상속받은.... ui 등록
override fun initUi() {
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
class MainActivityContract {
/**
* 단순 화면 처리
* 액티비이에서 뷰 구현
*/
interface View {
/** 뷰에 프레젠터 등록.*/
val presenter: Present
/** Ui 초기화*/
fun initUi()
}
/**
* 프레젠터 뷰와 모델의 데이터 처리
* 프레젠터 클래스를 생성하여 인터페이스 구현.
*/
interface Present {
/**프레젠터에 뷰 등록*/
var view: View?
/** 전달받을 뷰를 등록함.*/
fun attachView(view: View)
/** 뷰 해제*/
fun detachView()
}
}
/**
* 데이터를 처리하는 프레젠터
* 처리된 결과를 등록한 뷰에 전달.
*/
class MainActivityPresenter : MainActivityContract.Present {
//뷰 초기화
override var view: MainActivityContract.View? = null
//뷰 지정.
override fun attachView(view: MainActivityContract.View) {
this.view = view
}
//뷰 해제
override fun detachView() {
this.view = null
}
}