[iOS] Alamofire + Combine with Clean Architecture
Alamofire
- Swift를 기반으로 한 Http 네트워킹 라이브러리이다.
Combine
- 시간의 흐름에 따라 값을 처리하기 위한 프레임 워크(비동기 통신 프레임 워크)
위 두개를 사용하여 http통신을 하여 데이터를 비동기로 받아오는 예시를 Can 프로젝트에 작성해 보겠습니다.
사용할 API는 https://jsonplaceholder.typicode.com/ 에서 posts와 users를 사용할 것입니다.
Clean Architecture에 따라 가장 안쪽 부터 작성하겠습니다.
먼저 Domain Layer에 Entity에 모델을 만들어 줍니다.
사용할 모델 posts와 users에 해당하는 모델을 만듭니다.
다음으로 인터페이스를 작성해주고, 그걸 활용하여 viewModel에 사용할 수 있도록 usecase도 작성합니다.
이제 Data Layer에 API.swift를 만들어 Url 정보를 입력합니다.
- Clean Architecture에 따라 Data Layer에 작성합니다.
- fetchPosts, fetchUsers 각각 포스팅 정보리스트와 유저 정보 리스트를 가져오는 Url 입니다.
그 후에 DataLayer안에 APIService.swift를 만들어 Alamofire를 이용하여 통신을 하는 로직을 작성합니다.
각각 Alamofire를 이용해서 각각 해당하는 json데이터를 Domain Layer에 작성한 Model에 맞게 디코딩 해서 데이터를 가져옵니다.
위 로직을 활용해서 DataLayer에 Repository에 TestInterface DI를 아래와 같이 완성시켜 줍니다.
이제 해당 DataLayer에 Repository를 활용하여 ViewModel에 아래와 같이 작성해 줍니다.
이제 뷰가 onAppear 할때 List에 testData를 뿌려주면 끝 입니다.
아래 이미지를 참고해서 Flow를 작성했습니다.
정리하자면, View가 로드 되면서 ViewModel init 되면서 Domain Layer에 있는 인터페이스들을 보고 그 인터페이스 들은 DataLayer에 Api 통신을 하면서
다시 데이터들을 View에 가져오게 됩니다.