진짜 말그대로 알아보는 코너
iOS 개발을 하면서 나름 정리한다고 했는데도 폴더 구조도 그렇고 코드도 지저분해지는 게 느껴졌었다.
당시에도 그걸 어렴풋이 알고 있었는데 오랜만에 옛날 코드를 보니 더더욱 그랬다;;
아무래도 ViewController에 기능과 UI 처리를 함께 넣으려고 하니 구분이 힘들어진 탓인 것 같았음
그래서 이번에야말로! 그토록 벼르고 벼르던 MVVM에 대해 제대로 정리해보려고 한다.
지금까지의 토이 프로젝트나 회사 프로젝트에서는 각각 다른 이유긴하지만 MVC를 적용했었고, 그 뒤로는 플러터에 적응하느라 MVVM을 다뤄볼 시간이 없었다.
이번에는 정리도 제대로 하고, 기존 토이 프로젝트도 리팩토링 하려고 함.
https://github.com/kudoleh/iOS-Clean-Architecture-MVVM
GitHub - kudoleh/iOS-Clean-Architecture-MVVM: Template iOS app using Clean Architecture and MVVM. Includes DIContainer, FlowCoor
Template iOS app using Clean Architecture and MVVM. Includes DIContainer, FlowCoordinator, DTO, Response Caching and one of the views in SwiftUI - GitHub - kudoleh/iOS-Clean-Architecture-MVVM: Tem...
github.com
https://zeddios.tistory.com/1065
Clean Architecture
안녕하세요 :) Zedd입니다. Zedd신곡 나왔는데...엄청 좋아요 갓제드ㅠ 이거들으면서 쓰는 중 오늘은..클린 아키텍쳐 + MVVM에 대해서 공부를 해보려고 합니다! 클린 아키텍쳐는 한번쯤은 들어보셨을
zeddios.tistory.com
https://42kchoi.tistory.com/292
swift MVVM 정리 및 예제
iOS/Swift:: MVVM 정리 및 예제 iOS/Swift에서 MVVM 이 뭔지 제대로 이해해보려고 조사한 것이 결국엔 RxSwift를 배우지 않은 것의 크기를 경험하게 만들었고, 결국 Udemy에서 강의까지 사게 만들었다. RxSwift
42kchoi.tistory.com
MVVM(Model-View-ViewModel) 구조는 기존의 ViewController를 단순히 UI 표시를 위해서만 사용하고, Model과 ViewModel을 활용해 기능을 구현하는 방식이다.
'M'VVM의 Model
MVVM 아키텍쳐에서 Model은 데이터 구조를 정의하고 ViewModel에게 결과를 알려준다.
여기서의 Model은 View와 이어지지 않는다.
M'V'VM 의 View
MVVM의 View는 흔히 사용하는 ViewController에 코드를 작성한다.
view는 사용자와의 상호작용을 통해 이벤트가 일어나면 ViewModel에게 알려주며,
ViewModel이 업데이트 요청한 데이터를 보여준다.
MV'VM' 의 ViewModel
ViewModel은 사용자의 상호작용을 view가 보내주면 그에 맞는 이벤트를 처리하고,
Model의 Read Update Delete를 담당한다.
(출처: https://42kchoi.tistory.com/292)
그러면 폴더 구조는 어떻게 잡아야하고 코드는 어떻게 작성해야하나
거기에 대한 정답은 딱히 없는 것 같다.
storyboard 사용 여부, 내부 저장소 사용 여부, 프로젝트 규모 등등 여러가지 이유로 추가되거나 빠지는 것이 있었으니 최대한 가독성 좋게 배치하는 게 중요한 것 같았다.
그래도 최상단에 위치하는 공통적인 폴더를 꼽아보자면
Resources: Asset, (Info.plist - 선택사항)가 포함되는 폴더
Services(APIs): 각종 네트워킹 기능을 모아두는 폴더
Models & ViewModels: 모델이 하나 생성되면 그에 맞는 뷰모델을 1:1로 생성해야 함. Models 폴더와 ViewModels 폴더 각각 따로 생성해서 따로 정리함.
Views(또는 Controllers): 기존의 ViewController를 모으는 폴더
이정도?
그래서 궁금증이 남은 부분이 좀 있는데
1. Storyboard는 또 폴더를 추가해서 정리를 해야하는 건지 (이래서 SnapKit을 쓰나?!)
2. Controllers 폴더 하위에서는 기존 프로젝트처럼 화면마다 폴더를 나누어 정리해도 괜찮을지, 그렇게하면 Storyboard 하위 파일들도 Controllers와 똑같이 정리를 해아할지
3. ViewController가 아닌 공통적인 UI 요소는 Views(또는 Controllers) 외에 어디다 모아두는 게 좋을지
일단 당장 생각나는 게 이렇다.
궁금증을 해결하면 수정 추가할 예정!
'iOS' 카테고리의 다른 글
[iOS] UIView Draw Cycle (0) | 2022.12.06 |
---|---|
[iOS] Local Push Notification 활용해보기 (0) | 2022.12.05 |
[iOS] 앱스토어 등록 시 표시되는 언어 바꾸기 (0) | 2022.04.11 |
[iOS] URLComponents를 위한 Dictionary extension (0) | 2020.07.14 |
[iOS] 코드로 바 버튼 아이템 추가하기 (0) | 2020.07.14 |