Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] clean architecture를 적용한 MVVM 개념 맛보기 본문

Architecture (swift)/MVVM (맛보기)

[iOS - swift] clean architecture를 적용한 MVVM 개념 맛보기

jake-kim 2021. 6. 18. 01:55

MVVM 구조

  • Presentation Layer: View + ViewModel
    • ViewModel은 UI이벤트가 발생하면 '무엇'을 해야하는지 알고, UseCase를 요청 후 View에 업데이트 알림 역할
  • Domain Layer: UseCase + Model
    • 비즈니스 로직 계층
    • 저장소에 관한 Interface가 포함
    • 다른 프로젝트에서도 재사용 될 수 있도록, 다른 부분에 의존하지 않고 의존을 받는 상태
  • (Repository): Domain과 Data의 인터페이스 역할 protocol
  • Data Layer: DataStore + Entity

Presenter(ViewModel) vs UseCase

  • ViewModel에 비즈니스 로직을 넣는 경우는 잘못된 접근 
    • 비즈니스 로직은 UseCase에 존재
  • ViewModel의 역할은 UI이벤트들이 발생하면 '무엇'을 해야하는지 알고 있는 것
    • '무엇'을해야 하는지 알고 있기 때문에 UseCase를 실행시키고 UI에 업데이트를 알리는 역할
  • 비즈니스 로직은 앱에서 사용자와의 상호작용 아닌 업무 요구 사항을 담고 있는 것
    • 비즈니스 로직: "개발팀 외부의 사업 부서 사람도 알고 있어야 하는 로직"

Model vs Entity

  • Model은 Entity로부터 앱에서 사용하고자 하는 모델로 변경한것
    • Entity는 codable과 같은 json에서 파싱되는 모델
  • 만약 Model과 Entity차이가 별로 없다면 둘중 한 모델만 사용해도 무방

데이터 흐름

  1. View에서 이벤트가 발생 -> Presenter(ViewModel)에서 '무엇'인지 판단
  2. Presenter는 UseCase를 실행
  3. UseCase는 User와 Repository를 결합
  4. 각 Repository는 network, DB관련 Store에서 데이터 반한
  5. 다시 UI에 업데이트: Store -> Repository -> UseCase -> ViewModel -> View(UI)

* .drawio 파일:

cleanArchiteecture.drawio
0.00MB

* 참고

- MVVM template: https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/tree/master/MVVM%20Templates

- 개념: https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3

Comments