ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • iOS 앱 개발 디자인 패턴 / MVC, MVP, MVVM, RIBs
    ios 2021. 8. 2. 13:22

     

    iOS 앱 개발에 쓰이는 디자인 패턴 정리

     

    MVC, MVP, MVVM, RIBs 외에도 VIP, VIPER 등이 있지만

     

    구인공고에서 요구하는 스킬과 우대사항에선 MVC, MVP, MVVM, RIBs 이 많이 보여 넷만 정리

     

     

    MVC - Model View Controller 

    입력에 대한 처리와, 처리에 필요한 Model과, View의 관리 등 대부분의 처리를 Controller가 담당한다.

    ( 작은 규모라면 괜찮겠지만, 규모가 커질 수록 Controller가 커져 MVC가 Massive ViewController 가 된다고 한다. )

     

    그러나, 역할에 따라 MVC로 구분한 것은 좋았지만 

    C에 비즈니스 로직과 화면을 그리는 UI 관련 코드가 섞여 테스트가 어렵고, C가 과도하게 커져 

    MVP 라는 개념이 생긴다.

     

     

    MVP - Model View Presenter

    흐름

    - 입력이 들어오면, View는 1대1 관계의 Presenter에 전달한다.

    - Presenter는 입력에 따른 처리를 하고 이에 필요한 Model을 사용한다.   ( input 처리 - P )

    - 처리가 끝나고, Presenter는 어떤 요소를 그릴 지 View에 전달한다.       ( output 지시 - P )

    - View는 Presenter에게 받은 내용에 따라 화면을 그린다.                     ( UI 처리 - V )

     

    이렇게 Presenter는 UI 처리와는 구분이 되어 비즈니스 로직만 갖게 되어 MVC에 비해 유닛 테스트가 쉬워졌다.

    그러나, View와 Presenter 사이의 의존성이 있으며, 비슷한 View 들인데도 Presenter가 각각 필요했다. 

    ( 비슷한 화면과 로직이지만 input, output이 달라져야 하기에 V-P 는 1대1의 관계를 이룬다.  )

     

     

    그래서, input을 공통으로 처리하지만, output에는 관여하지 않으며,

    View에 사용될 Model을 다룬다는 개념의 ViewModel이 등장한다.

     

     

    MVVM - Model View ViewModel

    흐름

    - 입력이 들어오면, View는 ViewModel에 들어옴을 알린다.

    - ViewModel은 Model을 이용, 비즈니스 로직을 통해 View에 쓰일 ViewModel을 만든다.

        * Presenter와 달리, 이후 output과 관련해서 View에 어떠한 지시를 내리지 않는다. 데이터만 처리

    - ViewModel에서 데이터가 처리되면, View는 지켜보다 데이터를 가져와 화면을 그린다.

        * 여기서 View가 데이터의 처리와 변경을 확인하는 데에 데이터 바인딩 이 사용된다. 

        * 데이터 바인딩은 다용한 방법으로 구현할 수 있지만, RxSwift로 많이 구현함. 

     

    V - 입력을 ViewModel에 알리고, 처리를 지켜보다 완료되면 UI 처리를 한다.

    VM - 입력이 오면 Model을 이용해 비즈니스 로직 수행.   ( UI와 분리되어 데이터만 다루기에 테스트 용이 )

     

    뷰모델에는 뷰를 나타나는 데 필요한 상태(데이터) 와 뷰에 들어오는 input이 정의되어 들어있다.

    뷰모델에는 UI 로직을 제외한 비즈니스 로직만이 들어있다.
    데이터 바인딩을 통해 뷰모델은 뷰를 모르는 구조가 되어, 뷰로부터 독립적이게 됐다.

     

     

    RIBs - Router, Interactor, Builder

    생소한 디자인 패턴이다...

    잘 설명해주신 제드님 링크 첨부

    https://zeddios.tistory.com/937

     

    RIBs란?

    안녕하세요 :) Zedd입니다. 오늘은 RIBs에 대해서 공부해보려고 해요. 그동안 컨퍼런스/세미나에서..많이 들었었는데, 특히 민소네님에게! 본격적인 공부는 처음이네요. 오늘은 본격적인 튜토리얼

    zeddios.tistory.com

     

    단방향 아키텍처 ReactorKit, TCA (The Composable Architecture)

    데이터의 흐름이 단방향인 아키텍처들이 인기가 많아진 것 같다.

    큰 공통점은

    상태 관리 기반이며
    - 테스트에 용이하고 

    - 프레임워크 처럼 

    개발자가 코드를 정형화된 틀에서 작성하도록 한다.

    특히나, ReactorKit은 정형화 된 MVVM이라 느껴지고 사용하는 기업도 꽤 많이 보인다.
    ( MVVM을 구현하는 방식과 디테일은 사람 마다, 회사 마다 등 천차만별인 점이 있다.. )

     

     

     

    https://github.com/ReactorKit/ReactorKit

     

    https://github.com/pointfreeco/swift-composable-architecture#what-is-the-composable-architecture

     

     

     

    참고 영상 : 유튜브 곰튀김 채널 영상

     

    댓글

Designed by Tistory.