Map 과의 상호작용 분리하기
이전 포스팅(Link)에서 RxJava 로 GoogleMap 을 어떻게 관리하는지에 대해서 알아보았습니다.
이번 포스팅은 Map 과 상호작용하는 과정을 어떻게 독립적으로 분리할 수 있는지를 공유하고자 합니다.
Interactor
만들기
특정 좌표로 맵을 이동해야하는 기능이 필요하다 했을때 LatLongSnapInteractor
를 만들어 봅시다.
외부의 컴포넌트는 맵에 직접 접근하지 않고 LatLongSnapInteractor
를 통해서 Map 으로 접근합니다.
2. Interactor
관리체 만들기
위에서 작성한 Interactor 들은 Android Activity/Fragment Lifecycle 에 맞춰서 동적으로 동작할 수 있도록 하기 위해서 Lifecycle 에 따라 동작할 수 있는 관리주체가 있어야 합니다.
이 관리주체는 동일한 Scope 의 Lifecycle 을 관리해줍니다.
3. InteractorController
라이프사이클 대응하기
InteractorController
는 Activity
/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 를 통해서 확인 하실 수 있습니다.