[Swift] UIKit vs SwiftUI, MVVM

Boogios·2023년 6월 13일
0
post-thumbnail

UIKit vs SwiftUI

  • UIKit 단점
    Interface Builder와 코드를 수작업으로 연결해야함
    IB에서 뷰 뒤에 숨은 뷰를 설정하기 어려움
    애니메이션 적용이 잘 안됨

그래서, 결국 코드로 직접 화면을 구성함
그래도 여전히 존재하는 단점들...

Objective-C 기반 화면 구성코드보다 단순하지 않음
AutoLayout은 배우기 어렵고 화면 구성에 실수가 있을 수 있고 코드로는 더 복잡해짐

결국 시간도 많이 들고, 오류도 많이 생기고, 코드를 알아보기 힘들고 따라서 생산성이 떨어짐

SwiftUI 장점

  • Live Preview 제공
  • 선언적 구문 (declarative syntax)
  • 데이터 주도 (data driven)

SwiftUI 선언적 구문 Declarative syntax

  • 레이아웃에 포함될 컴퍼넌트 선언
  • 레이아웃 매니저 종류를 명시함 (VStack, HStack, Form, List 등)
  • modifier를 사용하여 속성을 설정함 (버튼의 텍스트, 색상, 탭 제스처 이벤트의 호출 메소드 등)

데이터 주도적인 SwiftUI, Data Driven

  • 데이터 주도적이다?
    앱 데이터와 사용자 인터페이스 및 로직 사이의 관계에서 본것임

UIKit에서는 데이터가 변경되면 그 변경이 화면에 나타나도록 직접 작성해야했음
또한 주기적으로 데이터 변경을 확인해서 적용시켜야했음

하지만 SwiftUI에서는 앱의 데이터 모델과 사용자 인터페이스 컴포넌트, 그리고 기능을 제공하는 로직을 Binding하는 여러방법으로 복잡도를 낮춰줌

데이터 모델은 앱의 다른 부분에서 구독(subscribe)할 수 있는 데이터 변수를 게시(publish)하게 됨
이런 방식으로 데이터가 변경된 사실을 알림

사용자 인터페이스 컴퍼넌트와 데이터 모델간의 바인딩이 된다면, 추가적인 코드 없이도 모든 데이터의 변경사항을 SwiftUI가 자동으로 반영해줌

MVVM (Model-View-ViewModel)

  • ViewModel은 View의 추상화 계층임
  • 뷰모델은 뷰를 알지 못하고 Notify만 하게 됨
  • 모델에서 값이 바뀌면 뷰모델이 뷰에게 값이 바뀌었다고 Notify만 하고 뷰는 그걸 확인하고 뷰에 반영하여 보여줌

SwiftUI에서는 데이터 주도적이기 때문에 ViewModel이라고 하지않고 Store라고 말하고 사용함
MVVM은 단지 아키텍쳐 구조고 SwiftUI라고 무조건 MVVM 패턴을 사용하진 않음

profile
iOS Developer

0개의 댓글