Nuke Olaf - Log Store

[MVP] 안드로이드에 mvp 패턴 적용하기(4) - Presenter 만들기 본문

ComputerScience/[디자인 패턴]

[MVP] 안드로이드에 mvp 패턴 적용하기(4) - Presenter 만들기

NukeOlaf 2020. 3. 10. 05:50
<안드로이드에 mvp 패턴 적용하기 시리즈>
안드로이드에 mvp 패턴 적용하기(1) mvp 패턴이란?
안드로이드에 mvp 패턴 적용하기(2) Contract 작성
안드로이드에 mvp 패턴 적용하기(3) Model 정의
안드로이드에 mvp 패턴 적용하기(4) Presenter 만들기
안드로이드에 mvp 패턴 적용하기(5) Activity 에 View 구현

우리는 전의 포스팅에서 아래의 화면을 MVP 패턴으로 구현하기 위한 Contract 와 Model 을 작성했다.

이제 Presenter 와 View 를 만들어 구현할 차례이다.

이 포스팅에서는 Presenter 를 작성하는 방법에 대해 알아보도록 한다.

 

1. Contract.Presenter 를 상속받는 Presenter 클래스 만들기

우리는 전의 포스팅에서 다음과 같이 Contract 를 작성했었다.

interface Contract {
    interface View {
        // TextView 에 info 데이터를 보여준다
        fun showInfo(info: JSONObject)
    }

    interface Presenter {
        // onCreate 화면 초기화시에 
        // 저장된 데이터가 있는지 Model 에서 확인하고
        // 확인한 결과에 따라 View 에 어떤 내용을 보일지 지시한다
        fun initInfo()

        // TextView 에 info 데이터를 보여주라고 View 에게 지시한다
        fun setInfo(info: JSONObject)

        // EditText 에 입력된 info 데이터를 저장하라고 Model 에게 지시한다
        fun saveInfo(info: JSONObject)
    }
}

이제, Contract.Presenter 인터페이스를 상속받는 Presenter 클래스를 만들 차례이다.

Presenter 의 생성자에는 View 와 Model 이 들어가며, Contract 에 정의했던 함수들을 작성해주면 된다.

class Presenter(
	val view: Contract.View, 
	val repository: InfoRepository) : Contract.Presenter {

    override fun initInfo() {
    	repository.getInfo(object: InfoDataSource.LoadInfoCallback {
        	override fun onInfoLoaded(info: JSONObject) {
            	view.showInfo(info)
            }
            override fun onDataNotAvailable() {
            	// 아무것도 하지 않음
            }
        })
    }

    override fun setInfo(info: JSONObject) {
        view.showInfo(info)
    }

    override fun saveInfo(info: JSONObject) {
        repository.saveInfo(info)
    }
}

 

Comments