본문 바로가기
Android/소스

코틀린 MVP 패턴 기본

by 므시칸곰틔군 2018. 7. 17.

코틀린 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

    }

}