'clean architecture'에 해당되는 글 1건

  1. 2016.06.22 안드로이드 소프트웨어 아키텍쳐 패턴 해부 #1

드디어 개인적으로 안드로이드 앱 아키텍쳐 패턴에 대해 해부해야 할 시간이 돌아왔습니다.


스프링으로 웹 애플리케이션 개발할 때는 MVC 패턴을 쓰는것이 표준이 되었지만 안드로이드 진영에서는 MVC, Uncle bob의 clean architecture, MVP, MVVM 등의 소프트웨어 아키텍쳐 패턴을 앱에 적용하려는 많은 시도와 노력들이 보였습니다. 더이상 기본 Model-View 아키텍쳐로는 유지보수 용이하고 테스트 가능한 앱을 만들기가 거의 불가능에 가깝고 이제 어느정도 안드로이드 앱 아키텍쳐에 대한 큰 흐름이 잡혀지는 느낌같은 느낌이 들어 인터넷에 정리된 것들을 다 훑어보고 날로 주어먹은 후 내용을 정리하려 합니다.


우선 기본적인 사항은 정리가 되었습니다. MVC는  안드로이드에 쓰기에는 부적합 한것으로 여겨지고, MVP, MVVM 중에 갑론을박이 조금 있기는 합니다만, 저의 주관으로는 MVVM을 쓰는게 현명해 보입니다. 둘다 SoC(Separation of Concern)을 잘 지키지만 MVVM이 좀더 View의 코드수를 훨씬 더 줄일 수 있습니다. 그리고 MVP에서 각 뷰, 프리젠터는 인터페이스를 정의하고 구현해야 하는데, Google data-binding을 사용하는 MVVM에서는 인터페이스를 정의하고 구현해야하는 수고가 없어졌습니다. Mark-up(XML)에 if-statement, for-loop등의 복잡한 로직을 넣지않고 ViewModel에서 단지 getter나 boolean을 반환하는 메소드만 호출하는 수준이면 MVP처럼 fully testable한 앱을 구현할 수 있습니다. 마크업에 대한 사용 규정은 팀원끼리 협의해야하겠습니다. 기술적인 내용외에 MVP 라이브러리 중 Square에서 만든 mortar가 방치되어 있는거나 reddit 쪽 쓰레드, 구글링을 통한 아키텍쳐 패턴에 관한 블로그를 봤을 땐 MVVM을 더 사용하고자 하는 움직임이 좀더 많게 보입니다.(수치 정량화 하진 않았습니다;;;) 


MVVM을 사용할 때는 View<->ViewModel 사이는 data-binding으로 이어주고 ViewModel<->Model은 RxJava로 통신하는 방식이 거의 표준으로 쓰이고 있습니다. 별도의 3rd party 라이브러리가 필요하진 않습니다. Dependency Injection을 위해 Dagger 2를 사용하고 HTTP 통신을 위해 Retrofit2를 쓰는 수준이면 기본적인 서비스 앱 구조를 잡기에 충분합니다. 이미 여러 샘플이 나와 있지만 저도 샘플 코드를 만들어야 하겠습니다. 우선 Learning Curve가 좀 높은 ReactiveX를 좀 해부한 후에 샘플 코드를 작성해야겠습니다. ReactiveX만으로도 할일은 태산이니까요ㅎㅎㅎ.

Posted by 제이제이랩
,