티스토리 뷰
Clean Swift 아키텍쳐에 대해 알아보겠습니다.
Clean Swift HandBook 의 내용을 간단 정리해보려고 합니다.
[1] Clean Swift가 나오게 된 배경
너는 MVC 패턴의 문제점을 인식하고(방대한 뷰컨트롤러) MVVM나 VIPER를 사용하려고 했을 것이다.
하지만 우리가 봤을 때 이 아키텍쳐들도 부족하다(??)
1. MVVM
단순히 massiveness가 viewController에서 viewModel로 이동한다.
너는 massive view controllers 대신 massive view models를 얻게 되는 것이다.
MVVM는 RxSwift와 함께 쓰면서 인기가 늘었다.
하지만 대부분 너는 reactiveness가 필요하지 않다. (실시간 채팅을 만들지 않는 이상.)
=> 쎄게 말씀하셨지만, 맞는 것 같다.. 🤔
2. VIPER
VIPER은 수년간의 매우 중요한 소프트웨어 시스템에서 입증 된 Uncle Bob이 제안한 Clean Architecture를 모방하려는 좋은 시도이다. VIPER는 Java와 같은 많은 언어에서 사용되었다. 수십 년 동안 테스트를 거쳤으며 많은 오래된 소프트웨어 설계 원칙을 포함한다.
하지만 VIPER는 presenter를 우주의 중심에 놓는다 (= VIPER puts the presenter at the center of the universe.)
모든 사용자 액션, 모델 업데이트, 라우팅이 presenter를 통한다.
그래서 presenter는 scene의 모든 구성 요소에 대한 참조를 갖는다.
원래 Clean Architecture에 설명된 간단한 단방향 제어 흐름 대신 모든 참조에서 메서드를 호출하기가 매우 쉬워졌다.
결과적으로 massive presenter로 끝난다.
=> VIPER를 안써봐서 모르겠지만, 예제코드들을 보았을 때, 맞는 것 같다.. 🤔
[2] Clean Swift의 VIP 주기
Clean Swift는 VIP주기를 도입하여 VIPER의 제어 흐름 문제를 해결합니다.
VIP주기는 단방향 제어 흐름을 제공하고 시스템의 기초를 형성합니다.
새 기능을 구현할 때는 항상 다음 단계를 수행해야합니다.
1) IBAction 메소드나 viewDidLoad()로부터 use case를 트리거 하세요
2) viewController는 interactor를 호출하여 일부 비즈니스 로직을 수행합니다
3) interactor는 persenter를 호출하여 결과를 일부 기본 유형으로 형식화합니다 (format the result to some primitive types)
4) present는 뷰 컨트롤러를 호출하여 결과를 화면에 표시합니다
제어흐름은 아래와 같습니다.
reactiveness에 대해서도
"CleanSwift에서 너는 RxSwift나 RxCocoa를 쓸 필요없다" 라고 말합니다.
VIP cycle로 인해 interactor에 있는 클로저 기반 비동기 메소드들이 주기적으로 업데이트를 제공할 수 있기 때문이라고 합니다.
VIP 외에 추가적으로 사용할 수 있는 것들은
- worker
: 복잡한 비즈니스 로직은 interactor에서 worker로 이동할 수 있습니다.
- navigation & data passing
: 새롭고 개선된 routing system은 라우팅 프로세스를 navigation 및 data passing의 두 단계로 분류합니다.
- request, response, view models
: request, response, view models는 변경을 분리하고 강력한 단위 테스트를 작성하는 데 매우 중요한 데이터 독립성 을 제공합니다 .
시스템은 지루할 수 있으나 효과적이라고 합니다.
템플릿이 지루한 파트를 처리해줘서 개발자는 interactor와 worker에 최적화된 비즈니스 로직을 작성하는 것에 창의적으로 집중할 수 있을 것이라고 하네요
여기까지가 홈페이지에 무료로 있는 내용이고, 그 다음부터는 Clean Swift Handbook을 구매해야합니다(ㅠㅠ)
저는 Clean Swift Handbook를 가지고 있어서 공부하고 저작권 침해 되지 않는 선에서 정리해볼게요..!
'🍏 > Architecture, DesignPattern' 카테고리의 다른 글
[Clean Architecture] iOS Clean Architecture + MVVM 개념과 예제 (2) | 2020.07.17 |
---|---|
[Design Pattern] Repository패턴이란 (0) | 2020.07.17 |
[DI] DI Tree, DI Graph (의존성 트리, 의존성 그래프)를 만드는 방법 (1) | 2020.01.17 |
[DI] 의존성 주입(Dependency Injection) 을 해주는 세가지 방법 (0) | 2020.01.17 |
[Architecture] iOS 앱 아키텍쳐 2탄 (ReactorKit/RIBs/Clean Architecture/CleanSwift) (0) | 2020.01.16 |
- Total
- Today
- Yesterday
- Python Type Hint
- Flutter getter setter
- Django Firebase Cloud Messaging
- Django Heroku Scheduler
- ribs
- DRF APIException
- flutter dynamic link
- flutter build mode
- 플러터 얼럿
- SerializerMethodField
- 구글 Geocoding API
- 플러터 싱글톤
- flutter 앱 출시
- Flutter Spacer
- drf custom error
- 장고 Custom Management Command
- METAL
- Flutter Text Gradient
- 장고 URL querystring
- Watch App for iOS App vs Watch App
- ipad multitasking
- flutter deep link
- Dart Factory
- Sketch 누끼
- cocoapod
- Flutter 로딩
- github actions
- PencilKit
- Flutter Clipboard
- Django FCM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |