ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Architecture] MVVM에 대해서 알아보기
    iOS 2021. 12. 28. 23:23

    Model과 View

    Model

    어플리케이션이 무엇을 할지를 담고있다.

    • UI와 완전히 독립적이다. -> Model 파일에서는 UIKit이나 SwiftUI를 import하지 않는다.

    • Data와 Logic을 다룬다.

    View

    어플리케이션이 어떻게 보여질지를 담고있다.

    • Stateless

      가끔 View의 여러가지 테마중 어떤 테마인지에 따라서 View의 모습이 바뀌는 등 State에 종속적인 부분도 있다고 생각할 수 있다.

      하지만 그것은 어플리케이션의 Logic과는 아무 상관이 없다.

    • Declarative

      코드에 있는 View가 모두 그려지고 나면 더 이상 바뀌지 않는다.

      바꾸고 싶다면 다시 그려야 한다.
    ✔️ View의 `Declarative`에는 장점이 있다.
    code를 작성할 때 UI가 어떻게 생길지 쉽게 상상할 수 있고,
    마찬가지 이유로 쉽게 읽을 수 있다.
    의도에 맞게 작성할 수 있다.

    • Reactive

      항상 Model의 현재 상태를 즉각적으로 반영한다.

      ViewModel을 통해서 구현된다.

    ViewModel

    ViewModel을 결합하는 역할을 한다.

    • Interpreter

      View가 원하는것을 읽고 필요한 작업을 수행해서 Model에 적용하는 느낌이 Interpreter와 같다.

      Model은 단순히 구조를 담고있고, View는 declarative를 갖기 위해서 간단하게 구현되고 싶다.

    ViewModel이 가운데에 있는 이유가 있다.


    Model -> ViewModel

    • Model은 변경사항이 발생하면 ViewModel에게 알린다.

    ViewModel -> View

    • Model의 변경사항을 알게 된 메커니즘과 다른방식으로 View와 소통한다.

      Model의 변경사항을 전 세계에 공표한다. 변경사항을 직접 전달하지 않는다.

      그 어떤 View에도 연결되어있지 않고, 어떤 View에 해당 변경사항이 전달되는지 모르고 그저 허공에 말할 뿐이다.

      그렇기에 전 세계라는 표현을 쓴 것이다.
    • ViewModel의 발표를 듣기 위해서는, 다른 무언가가 일을 하는게 아닌 View가 해당 viewModel을 subscribe해야한다.

      티비에서 수십개의 채널 중 보고싶은것을 선택하는 시청자와 같은 느낌이다.

      즉, 어떤 정보를 얻어올것인가는 View가 정하는 것이다.

    역방향적인 흐름에 대해서

     View -> ViewModel

    * 사용자의 의도를 구현한 Method를 실행해서 의도를 ViewModel에게 전달한다

    ViewModel -> Model

    * 의도에 알맞게 Model을 수정한다.

    ✔️ 예시) 여행을 위해서 호텔과 항공편에 대한 정보를 주는 어플리케이션.
    사용자의 의도는 항공편 예매내역을 확인하는것이지, 서버에 접속해 해당 ID의 이전 예약을 확인하고 데이터 구조에 전달해서 처리하고 등등이 아니다.
    View는 단순히 사용자의 의도에 맞춰서 ViewModel의 함수(예를들어 예매내역조회)를 호출한다.
    그러고 그 나머지 일은 ViewModel이 하는것이다. View와 Model간의 소통을 가능하게 해 준다.

    댓글

Designed by Tistory.