* 진행 코드는 https://github.com/jeongju9216/Jetflix에서 볼 수 있고, PR에서 에피소드 단위로 코드를 확인할 수 있습니다.
서론
넷플릭스 클론 코딩 - 2 내용은 Amr 유튜브 채널의 Building Netflix App in Swift 5 and UIKit - (Xcode 13, 2021) 에피소드 5, 6 내용입니다.
에피소드 5, 6에서는 네트워크 통신을 진행했습니다.
API는 https://www.themoviedb.org를 사용했고, 사용법은 원본 영상을 참고해 주세요.
구현 내용
- 네트워크 통신
- Protocol과 Enum을 이용해 Mixed Type 파싱
- completionHandler -> async/await 변경
- Domain, Data 레이어 추가
- Repository 구현
이번 구현에서는 참고 영상에서 수정을 많이 했습니다.
리팩토링은 구현을 한 번 완료하고 진행하기로 했으나, 전체적인 프로젝트 구조는 초반에 잡아야 한다고 생각했기 때문입니다.
네트워크 통신
API Call을 Repository를 이용해 구조를 잡았고,
모델에 따라 API 메서드를 따로 구현하지 않고 프로토콜과 Enum을 이용해 Mixed 타입 파싱을 했습니다.
([Swift] Enum을 이용한 Mixed Type JSON 디코딩)
파싱을 할 때는 Entity와 DTO를 따로 구현하여 DTO에는 Response의 모든 키 값이 들어가고,
필요한 파라미터를 이용해 Entity를 생성하도록 구현했습니다.
프로젝트 구조 수정
영상의 프로젝트 구조는 ViewController, ViewModel, Model로 파일을 관리했습니다.
기존 구조에서 Presentation, Data, Domain 레이어로 관리하도록 수정했습니다.
리팩토링 과정에서 프로젝트 구조를 역할별로 쉽게 파악할 수 있게 되었습니다.
비동기 처리
마지막으로 클론 코딩 영상에서는 completionHandler를 이용해 비동기 처리를 했습니다.
이를 async/await로 바꿔서 completionHandler의 단점을 개선했습니다.
([Swift] GCD와 Swift Concurrency 성능 비교)
리팩토링 계획
1. DI를 이용한 Repository 주입
2. Moya를 이용한 네트워크 레이어 구현
3. action으로 Repository 메서드 공통화
4. 프로토콜을 이용해 Repository 메서드 반환값 공통화
감사합니다.
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.