* 진행 코드는 https://github.com/jeongju9216/Jetflix에서 볼 수 있고, PR에서 에피소드 단위로 코드를 확인할 수 있습니다.
이번 포스팅까지가 영상을 따라 구현하는 내용입니다.
다음 포스팅부터는 스스로 고민하며 리팩토링하는 과정을 작성하겠습니다.
서론
넷플릭스 클론 코딩 - 4 내용은 Amr 유튜브 채널의 Building Netflix App in Swift 5 and UIKit - (Xcode 13, 2021) 에피소드 11, 12, 13, 14 내용입니다.
에피소드 11, 12, 13, 14에서는 유튜브 API와 웹뷰를 사용해 트레일러 영상을 재생하고, CoreData를 이용해 Entity를 저장하는 과정까지 진행했습니다.
구현 내용
- Youtube Data API 사용
- WebView를 이용해 Youtube 영상 재생
- CollectionView UIContextMenuConfiguration 구현
- CoreData를 이용한 엔티티 save, fetch, delete
이번 클론 코딩을 통해 WebView를 처음 사용해보았습니다.
웹뷰의 사용법이 생각보다 훨씬 더 간단해서 놀랐습니다.
func configure(with model: VideoPreview) {
guard let url = URL(string: "...") else { return }
webView.load(URLRequest(url: url))
}
물론 영상을 따라 구현한거라 제대로 공부는 하지 않았지만, 가볍게 봤을 때는 결과에 큰 문제는 없어보였어요.
CollectionView의 UIContextMenuConfiguration도 사용해보았습니다.
아이템을 길게 눌렀을 때 팝업 메뉴가 나오는 기능인데요.
놀랍게도 클론 코딩 전에 이 기능을 구현해보고 싶어서 롱클릭, 배경 불투명하게 하는 법 등을 서치하고 있었는데
이번 클론 코딩 과정에서 알게되서 정말 놀랐습니다.
클론 코딩이 나쁘기만 한건 아니구나... 라는 것을 다시 한 번 느꼈어요.
위 다운로드 버튼을 누르면 CoreData에 모델 객체가 저장됩니다.
비디오 다운로드는 아니고 그저 엔티티 객체를 저장하는 의미의 다운로드에요 ㅎㅎ;
이렇게 저장한 객체는 다운로드 탭에서 볼 수 있습니다.
테이블뷰의 스와이프 Delete 기능도 가볍게 구현해보았습니다.
리팩토링 계획
- MVC를 MVVM으로 변경
- ViewModel을 이용해 데이터 바인딩
- 다운로드 버튼, 재생 버튼 이벤트 구현
마무리
다음 포스팅부터는 클론 코딩의 영상에서 어떤 점을 개선할 수 있을지 직접 고민해보고 고치는 과정을 다루려고 합니다.
클론 코딩이 그저 따라만 치는 거에서 끝나면 큰 의미가 없겠고, 스스로 고민하는 지금부터가 진짜겠죠.
취준이 끝나면 보다 가벼운 마음으로 학습을 할텐데 마음이 무겁네요.
감사합니다.
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.