Map 과의 상호작용 분리하기

이전 포스팅(Link)에서 RxJava 로 GoogleMap 을 어떻게 관리하는지에 대해서 알아보았습니다.

이번 포스팅은 Map 과 상호작용하는 과정을 어떻게 독립적으로 분리할 수 있는지를 공유하고자 합니다.

  1. Interactor 만들기

특정 좌표로 맵을 이동해야하는 기능이 필요하다 했을때 LatLongSnapInteractor 를 만들어 봅시다.

외부의 컴포넌트는 맵에 직접 접근하지 않고 LatLongSnapInteractor 를 통해서 Map 으로 접근합니다.

2. Interactor 관리체 만들기

위에서 작성한 Interactor 들은 Android Activity/Fragment Lifecycle 에 맞춰서 동적으로 동작할 수 있도록 하기 위해서 Lifecycle 에 따라 동작할 수 있는 관리주체가 있어야 합니다.

이 관리주체는 동일한 Scope 의 Lifecycle 을 관리해줍니다.

3. InteractorController라이프사이클 대응하기

InteractorControllerActivity/Fragment 의 Lifecycle 에 대응하기 위해서 Activity/Fragment 에 주입되어 각 라이프사이클에 맞춰서 동작하도록 할 수 있습니다.

4. ViewModel,Presenter 에서 Interactor 호출하기

이제 ViewModel 에서 Interactor 에 필요한 처리를 호출하여 동작하도록 합니다.

위와 같이 ViewModel 은 LocationProvider 에 제공받는 위치 정보를 interactor 값을 전달합니다. Interactor 는 받은 값을 토대로 내부 처리를 하도록 합니다.

요약

InteractorController : Intractor 와 MapProvider 사이에서 Map 객체와 라이프사이클을 관리하고 전달하는 역할을 수행합니다.

Interactor : ViewModel/Presenter 와 Map 사이에서 처리에 필요한 정보를 관리하고 처리를 요청하는 역할을 수행합니다.

많은 기능을 가진 Map 객체에 대한 처리를 여러 Interactor 로 나누어서 외부 인터페이스를 관리할 수 있습니다. 이를 ViewModel/Presenter 등 실제 비지니스 로직을 수행하는 객체에 적은 인터페이스만 노출하여 관리할 수 있으며 맵 초기화, 라이프사이클 관리, 실제 동작 수행이 분리되어서 관리할 수 있는 장점이 있습니다.

실제 샘플 코드는 Github Link 를 통해서 확인 하실 수 있습니다.

Android Developer, Google Developers Experts

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store