JEP's Diary

SwiftUI에 맞는 아키텍쳐가 뭘까?(1) 본문

Development/개발일지

SwiftUI에 맞는 아키텍쳐가 뭘까?(1)

지으니88 2023. 4. 25. 22:56

오늘 개발하면서 SwiftUI에 적합한 아키텍쳐는 MVVM이 맞나?! 라는 의문이 들었다.

의문을 들게 했던 이슈를 먼저 나열해보자면...

 

요즘은 앱에 신규 기능을 추가 하기 전에, 퍼포먼스를 올리기 위해 데이터를 구성하는 시점을 변경하고 있던 중에 이슈가 생겼다.

 

기존방법

기존에는 리스트에 표시할 데이터를 모두 구성한 후 뷰에 그리는 방법이었다. 컬렉션 조회 REST API를 호출한 후 추가적인 정보가 있어서각각의 컬렉션에서 3개의 API를 더 호출하여 최종적인 컬렉션 데이터 리스트를 구성하고 있었다.

 

기존방법의 이슈

이렇게 했을때 리스트의 갯수가 많아질수록 데이터를 구성하는데 시간이 오래 걸리는 이슈가 생기기 시작했다. 

 

변경해보기

컬렉션 조회 API를 호출하여 컬렉션 데이터 리스트를 먼저 만들고 뷰에 표시를 한다. 그리고 각 컬렉션 Row가 뷰에 onAppear 될때 추가정보를 위해 3개의 API를 호출하여 받아온 데이터를 컬렉션 Row 뷰 안에서 갱신해준다.

 

발생한 이슈

하나의 Row에서 onAppear 되는 시점에 여러번의 onAppear가 호출 되는 이슈가 생겼다.

어제 작성했던 이슈...(LazyVStack에서 기존 뷰가 남아있었던)를 해결하고자 했던 .id(UUID)를 넣을 코드 한 줄 때문에 onAppear가 여러번 호출되는 현상이 생겼다. 왜그럴까ㅜㅜ 이것도 찾아봐야지...(04.25 11PM 시점에는 아직 원인,해결을 못했음)

 

MVVM을 쓰는게 맞나? 라는 생각이 들었다.

Screen 에 10개의 컬렉션 리스트가 있다면, 10개의 itemViewModel를 모두 생성하여 들고 있는 구조.

일단 이부분이 컬렉션의 갯수가 많아질 수록 메모리에 할당되어있는 itemViewModel의 갯수가 많아지므로 이것부터 고쳐야 겠다는 생각을 하다가 문득 여기서 itemViewModel가 무슨 역할이지?에 대한 답이 뚜렷하게 생각나지 않으면서.. SwiftUI에 맞는 아키텍쳐가 MVVM이 맞을까? 아니면 내가 MVVM 구조를 너무 당연하게 사용하고 있나? 라는 질문이 생겼다.

View와 Model의 중간역할로 ViewModel을 사용하는 것, 또는 View에서 비즈니스 로직을 분리시키기 위한 ViewModel의 역할로 사용하고 있는것이 어느순간부터 당연하게 생각되었던 거 같다 라는 생각이 들었다.

 

SwiftUI에서 MVVM 구조를 지양하는 의견들의 배경

  • ViewModel은 View에 데이터 바인딩을 하기 위한 목적으로 사용된다. 
  • SwiftUI에서의 View는 이미 View + ViewModel의 역할을 하고 있다.
  • SwiftUI에서 View는 자체적으로 Data Binding이 가능한 PropertyWrapper를 지원한다. (ex. @State)
  •  

 

 

 

참고