Presentation Layer (MVVM)
= ViewModel (Presenter) + View (UI, ViewController)Domain Layer
= Entity + Use case + Repository Protocol (Dependency Injection을 위해 사용)Data Layer
= Repository Implements + API, DB (Network Code * Service, DTO)
- 사용자가 ViewController에서 버튼을 클릭한다. (VC에서는 addTarget을 통한 인식이 들어오고 -> action 메서드 호출)
- ViewController의 action 메서드에서 ViewModel에게 들어온 Event를 전달한다.
- ViewModel은 UseCase에게 데이터를 요청한다.
- UseCase는 Repository를 통해 "원하는 지역의 날씨 데이터를 가져오는" 비즈니스 로직을 수행한다.
- Repository는 Service에게 외부 API에 데이터 요청을 보낸다.
- Service는 API를 호출해서 디코딩된 데이터를 DTO 구조체의 형태로 가져온다.
- Repository는 Service에서 받아온 DTO(API Response의 맞춰 정의된 데이터 구조)를 Entity(애플리케이션 내부에서 사용할 데이터 구조)로 변환한다.
- ViewModel은 가져온 데이터를 Observable 객체에 할당한다. (View가 해당 데이터를 observe 하고 변경 사항을 알아차릴 수 있게 하기 위함)
- Observable은 didSet 구문으로 데이터의 변화를 감지하고, 바인딩된 ViewController에게 변경사항을 알린다.
- ViewController는 전달받은 변경사항을 반영하여 UI를 업데이트한다.
자세한 내용은 <코딩하는 체대생 - Clean Architecture + MVVM + Observable 사용해서 날씨앱 리팩토링하기> 글에서 확인하실 수 있습니다:)