[Swift] Clean Architecture + MVVM 맛보기
필자가 개인적으로 가장 좋아하는 아키텍쳐이다. 지금까지 간단하게 배웠던 아키텍쳐들은 필자가 느끼기에 아래와 같은 장단점을 가졌다고 생각한다.
VIPER
- 구조가 명확하고 View, Interactor, Presenter, Entity, Route 형태로 나뉘어져서 수정할려는 한 부분에 집중할 수 있다.
- 한 부분을 수정할려면 많은 파일들을 수정해야한다. 하지만 이 부분이 컴파일 오류를 만들어줘서 오히려 안정성이 더 있는듯?
- 규모가 커지면 커질수록 Presenter도 커지는 느낌을 지울수가 없다?
- 혼자서 하거나 완전 소규모 형태로 앱을 개발할 때는 적용하기 힘들다. 할 게 너무 많아짐.. 완전 소규모로 개발하는거라면 앱이 빨리 출시되는게 더 중요할텐데…
MVC
- 애플에서 샘플로 MVC 아키텍쳐를 사용한다. 간단하게 앱 만들때 짱임.
- 손쉽게 앱 만들기 좋은 구조.
- 기능이 좀 추가된다면
ViewController
에 모든 로직이 들어가져서 다른 개발자가 유지보수하기 힘들다.
MVP
- 위의 MVC 패턴에서 비즈니스 로직을 Presenter에 던져뒀다.
- 직관적인 구조. 대신 View에 따로 데이터가 갱신되었다는 알림을 직접 해주어야한다.
- 한번도 제대로 파보지 않아서 잘 모르겠지만 MVVM에서 데이터 바인딩이 빠진거 같음. 이거랑 MVVM이랑 이름 말고 차이점이 뭐지?
- 구조가 정확하게 잡혀있지 않아 프로그래머 마다 작성 스타일이 다 다름
MVVM
- MVC 패턴에서 비즈니스 로직을 ViewModel에 던져뒀다.
- 직관적인 구조. 대부분 Reactive 프로그래밍을 통해 구현하므로 데이터가 갱신되었다는 알림을 직접 해줄 필요 없다.
- Reactive 프로그래밍을 모른다면 MVP 패턴으로 이름이 둔갑할듯.
- 구조가 정확하게 잡혀있지 않아 프로그래머 마다 작성 스타일이 다 다름
여기까지 필자가 간단하게 공부했던 아키텍쳐 장단점인데, 필자는 주로 혼자 작업했기에 MVVM 패턴을 사용하고 있다.
하지만 최근에 모듈화를 하는 과정에 관심을 가졌고, 관련 글을 찾아보니 MVVM에 패턴에 클린 아키텍쳐를 접목시켜 모듈화를 한 게시글을 보았다.
보자마자 바로 샘플 앱을 만들었는데 손쉽게 모듈로도 분리할 수 있어서 나중에 협업을 하게 된다면 무조건 채택할듯..
일단 샘플 앱의 구조를 보자. Application에 어플의 중요한 부분을 구성해두었고, Presentation에는 각 화면별 모듈이 포함되어있다.
그리고 이건 따로 모듈로 분리했던 화면인데 폴더가 뭔가 많지만 별 거 없다.
- Network의 경우에는 네트워크 통신 부분과 통신을 통해 받은 데이터를 DTO로 변환하는 기능이 포함되어있다.
- Domain 폴더의 겨우 Entities, Interfaces, UseCases 로 분리되어있다. Entities에는 전송할 데이터의 구조체를 포함하고 있고, Interface에는 네트워크 통신의
protocol
이 구현되어있다. 나중에 유닛테스트할때 해당 프로토콜을 기준으로 목업 네트워크 서비스를 만들어서 테스트하면된다. UseCases의 경우 터치 액션이 들어올시에 네트워크 통신을 호출하는 함수를 호출해두었다. - Presentation은 화면에 관한 기능이 포함되어있다. 비즈니스 로직은 ViewModel에서 처리한다.
- 그리고 마지막의
MainSceneDIContainer
의 경우는 해당 화면의 의존성(네트워크)등을 주입해준다. 즉, 얘가 엔트리 포인트임
아, 그리고 클린 아키텍쳐를 만드신 분께서는 RxSwift
사용안해도 괜찮다고 하는데, 사용해도 상관은 없다.
최신 댓글