ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ios] Clean Architecture + MVVM-C (1)
    ios/ios 2024. 3. 9. 19:46

     

    처음에 만들었던 프로젝트를 구경하다가 코드가 매우 지저분하다고 느낀 적이 있습니다. 유지보수를 위해서는 기능, 역할에 따라 코드를 잘 분리하고 분리하기 위해서는 좋은 아키택처를 사용해야 합니다. 그래서 Clean Architecture와 MVVM에서 뷰의 관리를 따로 두는 MVVM-C를 공부해 보았습니다.

     

    먼저 MVVM은 Model, ViewModel, View 3가지의 계층으로 코드의 역할을 분리한 아키택처입니다.

     

     

    Model

    - 애플리케이션에서 데이터를 나타냅니다.

    - 데이터를 가져오고 저장하는 역할을 수행합니다.

     

    View

    - 시각적인 요소를 나타냅니다. (UI, Layout)

    - 사용자의 입력을 받고 정보를 표시하는 역할을 합니다.

     

    ViewModel

    - View와 Model의 중간 매개체로써 뷰에 데이터를 가공하고 사용자의 입력을 처리합니다.

    - 보통 비즈니스 로직을 여기서 처리합니다.

     

     

    MVVM을 사용하다 드는 생각은 뷰의 이동은 ViewModel에서 처리하는 게 맞는 건지 View에서 처리하는게 맞는건지 고민했던 적이 있습니다. 그 당시에는 View에서 처리했었지만 코디네이터 패턴처럼 뷰를 관리하는 패턴을 알게 되었고 MVVM과 접목시켜 MVVM-C 패턴이 있다는것도 알게 되었습니다. 코디네이터 패턴에 대해서는 아래 링크에 간단하게 정리 해 보았습니다.
    https://tae1010.tistory.com/49

     

    [iOS] Coordinator 패턴

    Coordinator패턴? 앱을 제작할 때 다양한 아키택처 패턴을 자주 사용합니다. 그중 MVVM 아키텍처 패턴을 사용하는 이유 중 하나는 "ViewController가 하는 일을 줄이자"입니다. 기존 MVC 패턴에서는 ViewContr

    tae1010.tistory.com

     

     

     밑에 사진은 Clean Architecture를 검색하면 자주보이는 그림입니다.

     

    Clean Architecture는  『클린 코드(Clean Code)』를 저술한 로버트 마틴(Robert C. Martin)이 제안한 시스템 아키텍처입니다. Clean Architecture를 사용하는 가장 큰 이유는 관심사의 분리입니다. 사진처럼 각 영역은 반대편의 영역에 있는 요소들을 알지 못합니다.

    사진에는 크게 Entities, UseCases, Interface Adapters, Franework로 구성되어 있습니다. 각 영역의 특징입니다.

     

    Entities

    - 엔티티는 데이터의 구조를 정의합니다

     

    Use Cases

    -  유스 케이스는 애플리케이션의 사용 사례를 구체화 하고 도메인 로직을 포함하고 있습니다.

     

    Interface Adapters

    - 인터페이스 어댑터는 외부의 데이터를 애플리케이션 내부의 유스케이스 간의 통신을 담당합니다.

    - 우리가 작성하는 MVVM 코드가 여기에 해당합니다.

     

    Framework

    - 애플리케이션의 외부 환경과 상호 작용하는 코드를 포함합니다.

    - 서버와의 네트워크 통신이나, DB간의 데이터 통신을 여기서 담당합니다.

     

     

    각 영역의 핵심은 내부 영역은 외부 영역에 대해 알지 못합니다. 내부 영역은 외부 영역에 의존하면 안되고, 의존성은 항상 내부에서 외부로 향하도록 유지하게 작성하여야 합니다. 그렇게 내부 영역은 외부 환경의 변화에 영향을 받지않고 변경이 가능해야 합니다.

Designed by Tistory.