MVC 패턴은 가장 대중적인 프로그래밍 패턴이라고 생각합니다 그만큼 개발자에게 편리함을 가져다주었던 좋은 패턴이었습니다.
하지만 기술이 진보하며 앱이 점점 커지고 복잡해져 30–40 개가 넘어가는 스크린을 MVC 패턴으로 관리하기에 한계가 느껴질 수 있습니다.
위의 이유로 Model . View. Controller (MVC) 가 아닌 Massive View Controller 라고 놀림 당하고 있습니다…
저도 앱을 개발하다보면 View controller가 뚱뚱해지는것은 부정할 순 없습니다.
위와 같은 이유로 오늘은 아직 대중적이지는 않지만 반응이 괜찮은 Clean Swift에 관하여 포스팅 하겠습니다.
Clean Swift?
Clean swift는 프레임워크가 아닌 템플릿으로 V.I.P 패턴을 쉽게 사용하게 만들어주는 템플릿입니다.
https://clean-swift.com/ 접속해보면 처음 보이는 페이지에서 아래와 같은 문제를 해결해 줄 수 있다고 하는 것 같습니다.
- ViewController가 방대해져 이해 및 버그 수정 그리고 새로운것을 추가하기 힘든 문제
- 1과 같은 문제로 Model 클래스로 비지니스 로직을 옮겼지만 , 모델 또한 뚱뚱해지는 문제
- 앱이 하나의 거대한 스토리보드를 사용하는 문제
- 버그가 생겨 재현하는데 4시간을, 그리고 그것을 고치는데 1주일을 낭비하느라 아무데도 가지 못하는 문제
- 코드에 무언가를 추가하기 위해서 처음부터 다시 리,리,리 팩토링 하는 문제
- TDD기법이 제대로 활용이 안되는 코드
각각 scene에 대하여 5가지 컴포넌트로 구성이 되며 컴포넌트각 상호작용이 프로토콜로 이루어집니다. (ViewController, Model, Interactor, Presenter, Router)
https://medium.com/swift2go/installing-the-clean-swift-template-in-xcode-6b4367006827 템플릿설치 방법이 설명되어있습니다.
File -> New File -> File 아래에 스크롤 하여 Clean Swift 영역에서 Scene 이용하여 파일을 생성하면 아래와 같이 5개의 파일이 자동으로 생성됩니다.
• Model.swift
Models - 컨트롤러와 관련된 모든 모델을 저장.
- Requset -API request에 보내지는데 필요한 파라미터
- Response -API로부터 response를 intercept 하고 데이터를 저장
- ViewModel -UI에 관련된 모든것을 저장
• Worker.swift
Worker - API/CoreData 요청 및 응답을 관리한다. Interactor에게 줄 데이터를 준비한다
• Interactor.swift
Interactor -Worker 와 Presneter 사이의 중개자이다.
VC -Model (request) -Interactor -Worker -Model (response) -interactor -presenter 와 같은 흐름이다.
• Presenter.swift
Presenter -Interactor로 부터 받은 데이터를 ViewModel에 맞게 정형화하고 뷰컨트롤러에 전송한다. 즉 사용자에게 데이터를 어떻게 보여질지 결정한다
• Router .swift
Router -뷰컨트롤러 사이에서 데이터 transition과 passing을 관리한다.
이렇게 구조에 대해서 설명해드렸습니다.
기본 템플릿으로 설명을하여 구조의 흐름이 잘 이해가 안가실수도 있습니다.
https://github.com/Clean-Swift/CleanStore 에서 예제 프로젝트를 다운 및 https://hackernoon.com/introducing-clean-swift-architecture-vip-770a639ad7bf 에서 더 자세한 설명을 보실 수 있습니다.
한 view당 5개의 컴포넌트로 구성되어 복잡하실 수도 있지만 코드에 break point 찍으면서 따라가시면 금방 구조를 이해하실 수 있습니다.
빠른 시일내에 직접 예제 프로젝트를 만들어 포스팅하도록 하겠습니다.
이상.