안드로이드 개발자 커뮤니티에서 MVP, MVVM 등의 패턴이 엄청난 관심사로 떠올랐다가 열기가 식어갈 무렵 iOS 개발도 시작하게 되었다. iOS 개발자들 사이에서는 어떤 패턴이 유행하는지 검색하다가 VIPER라는 패턴을 발견했는데, 이 동네도 MVP, MVVM이 한 번 휩쓸고 지나갔고 가장 최근 등장한 것이 VIPER 패턴인 것 같은데 현재 프로젝트에 한 번 적용해볼까 하는 생각이 든다.
MVP 패턴을 이야기할 때 Clean Architecture가 종종 언급되는데, 사실 MVC, MVP는 Clean Architecture에서는 하나의 레이어에 불과하다. 다음은 Interface Adapter 레이어에 대한 설명의 일부이다.
It is this layer, for example, that will wholly contain the MVC architecture of a GUI. The Presenters, Views, and Controllers all belong in here.
따라서 MVP 패턴만 공부해서는 앱 전체에 대한 아키텍쳐를 만들어내기가 어렵다.
VIPER 패턴은 이름에서 짐작할 수 있듯 5개의 요소로 구성된다.
View, Interactor, Presenter, Entity, Router(또는 Wireframe).
이름들이 MV(C,P,VM)으로 가다가 갑자기 이름의 패턴이 바뀌었다. 내가 보기에 VIPER는 Clean Architecture 관점에서 Interface Adapter 이외의 레이어를 설계요소에 포함한 유일한 패턴으로 보인다. 하지만 결국은 MVP에서 M(Model)으로 퉁쳤던 걸 Presenter와 Entity가 Interactor를 통해서 상호작용하는 것으로 조금 더 쪼개놓은 정도로 보이기도 한다. MVP + (Entity 처리에 관한 약간의 상세) 정도의 느낌? 그런데 Router가 왜 굳이 들어갔는지는 잘 모르겠다. iOS에서 view를 표시하는 방식의 특성을 감안한 부분인 것 같은데, 이건 좀 더 봐야 알 수 있을 것같다.
참고자료