RxJava 로 관리하는 Google Map

Google Map 이나 다른 종류의 Map 서비스를 관리할 때 Map 을 어떻게 관리할 것인지 Map 접근자는 어떻게 할지는 큰 고민거리입니다.

Google Map 에 대한 관리는 좋은 예제를 가지는 곳이 드물기 때문에 때로는 날것 그대로 관리하는 곳도 많습니다.

오늘은 Map 초기화에 대해 얘기해보도록 하겠습니다.

1. Map 컴포넌트 전달 방법 정하기

제목에서 예상했듯이 Map 컴포넌트는 RxJava 의 Observable 을 통해서 전달할 것입니다. Map 제공자는 초기화가 완료된 후 전달합니다. 따라서 Map 제공자는 2개의 함수를 가지게 됩니다. : initiateMap() , getMap()

Single 이 아닌 Observable 인 이유는 사용자가 동적으로 Map Off 할 수 있다는 점을 감안하여 Off 된 경우에도 핸들링을 할 수 있도록 하기 위함입니다.

2. Map 초기화 코드 작성하기

Google Map 은 초기화를 2가지로 나눠서 볼 수 있습니다. : addMapFragment() , waitingForLoading()

1) MapFragment 생성

Fragment 를 생성하고 화면에 추가한 다음 emitter.onNext(mapFragment) 로 다음으로 전달합니다.

하지만 위의 코드는 화면이 종료 되거나 에러가 발생할 경우 초기화 하는 코드를 같이 넣어주어야 합니다.

Observable 의 dispose 액션이 발생하면 초기화를 해야한다고 인지하고 fragment 를 삭제 하고 캐시에는 아무런 동작을 하지 않는 Stub 객체를 전달하도록 합니다.

2) Map 초기화 완료

Map 이 초기화가 완료되어 MapView 활성화 된 후 다음으로 전달하도록 해야합니다.

3. 최종 코드 모습

맵이 초기화 되면 내부의 캐시에 저장하도록 하고 외부 컴포넌트들은 캐시를 통해 접근하도록 합니다.

맵 컴포넌트를 초기화 하는 과정과 초기화 후 RxJava Observable 을 통해서 전달하는 방법을 알아보았습니다. 초기화 전 또는 초기화 해제 시 stub 객체 DEFAULT 를 전달하고 초기화를 완료 후 MapView 가 완성되면 다음으로 전달하도록 하였습니다.

다음 포스팅은 초기화가 완료된 Map 컴포넌트를 어떻게 활용할지 알아보도록 하겠습니다.

Written by

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