clyne의 개발 기록
[MVVM-iOS] ViewModel에서 push, present 하기 본문
안녕하세요!
iOS 개발자 CNOO입니다.
오늘은, 렛터디 서비스에 MVVM 디자인 패턴을 적용하던 도중, MVC에서는 "당연히" 쓰던 UIViewController내 함수들을
ViewModel에서는 어떻게 써야할지 몰라서 삽질했던 경험을 공유드리고자 포스팅 하게 되었습니다.
iOS개발자라면 다들
UIAlertController를 띄우거나, 다른 ViewController를 띄워주기 위해
pushViewController 또는 present 메서드를 이용했었죠!
그런데 말입니다....
이걸 ViewModel에서는 어떻게 띄워야 할지 모르겠단 말입니다....
그래서 저는 두 가지 방법으로 해결해보았습니다.
(정답은 없습니다, 그러나, 조금 더 나은 방법이 있다면 댓글 남겨주시고, 아시는 내용 있으시면 공유 부탁드립니다.. ^^)
1. ViewModel 생성시 UIViewController를 인자값으로 넘겨주기
이 방법은 아주 직관적이고도 간단합니다.
그냥 ViewModel을 생성할 때 자기 자신을 인자값으로 같이 넘겨주는거죠!
이렇게 말이죠!!!
근데 이 방법은, UIViewController의 레퍼런스 카운트가 하나 상승하는 단점이 있는데,, 메모리릭이 발생하거나 그러진 않더라구요...
그리고 이렇게하면, ViewModel이 View를 참조하는 부분이 있어, 완전한 로직의 독립이 되기도 좀 힘들 것 같다는 생각이 들었습니다.
즉, MVVM 패턴에 의의에 부합하지 않는다는 느낌을 받을 수가 있네요...
그래서 생각해본 것이 두번쨰 방법입니다!!
2. UIApplication 으로부터, TopViewController가지고오기
이 방법은 가장 최상위에 떠있는 ViewController를 가지고와서 활용하는 방법입니다.
위와같이 UIApplication을 확장하여, topViewController를 들고오는 것입니다.
그런데, 이 방법은 modal 화면에서는 얼럿이 안뜨더라구요 ㅠㅠㅠㅠㅠ...
이유는 아직도 찾지 못했습니다...
저는 1번과 2번을 혼용해서 쓰고있는데,
혹시 더 좋은 방법이 있다면 공유 부탁드립니다.
그럼 오늘도 빡개발 하시기 바랍니다!
안녕~~
'iOS > MVVM' 카테고리의 다른 글
[RxSwift+MVVM] 기본 구조 실전 예제 (0) | 2021.04.20 |
---|