FilmRoad는 요즘 인기있는 TV 프로그램 탐색, 검색, 저장할 수 있는 TV 프로그램 탐색 앱입니다.
- iOS 1인 개발
- 개발 기간: 1주 (2024.06.17 ~ 2024.06.25)
- 환경: 최소 버전 16.0 / 세로 모드 / 아이폰용
- TV 프로그램 탐색 | 이번주 유행하는 TV 프로그램 / 가장 인기 있는 TV 프로그램 / 요즘 대세 TV 프로그램 탐색
- TV 북마크 | 등록 / 취소 / 조회
- TV 상세 화면 | 설명 / 시즌 / 에피소드 / 캐스트 정보 / 비슷한 콘텐츠 / 티저 재생
- TV 프로그램 티저 재생 화면
- TV 검색
- 프로필 | 조회 / 수정
프로필 조회 | 프로필 수정 |
---|---|
TV 프로그램 탐색 | TV 프로그램 검색 | 상세 화면 | 에피소드 리스트 |
---|---|---|---|
티저 재생 | 북마크 등록 • 취소 | 북마크 조회 |
---|---|---|
Framework - SwiftUI / UIKit
Pattern - Router / MVVM / Input-Output / DI / Repository
Network - URLSession / Alamofire
Database - Realm
Reactive Programming - Combine
Etc - Swift Concurrency / WKWebView
MVVM / Input-Output
- MVVM 디자인 패턴을 적용함으로써 뷰와 비즈니스 로직을 명확하게 분리
- Input-Output 패턴을 통해 로직에 사용될 입력값과 뷰에 사용될 출력값을 분리
Alamofire
- Router 패턴과 TargetType 프로토콜을 통해 네트워크 통신 API를 구조화 및 확장
URLSession
- URLSession을 통해 네트워크 통신을 함으로써 최적의 성능과 안정성 제공
Concurrency
- async와 await 키워드를 통해 코드 가독성 향상 및 스레드 생성량과 컨텍스트 스위칭 감소
Etc
- ViewModifier를 활용해 View들에 대한 CustomWrapper 구현
- @ViewBuilder를 사용하여 NavigationBarWrapper 구현
- @ViewBuilder를 통해 NavigationLazyView를 구현함으로써 하위뷰가 그려질 때 init되는 이슈 해결
- final 키워드와 접근제어자를 통해 컴파일 속도 최적화
- 클로저를 통해 뷰가 init되도록 NavigationLazyView를 구현
struct NavigationLazyView<T: View>: View {
let build: () -> T
init(_ build: @autoclosure @escaping () -> T) {
self.build = build이
}
var body: some View {
build()
}
}
NavigationLazyView 적용 전 | NavigationLazyView 적용 후 |
---|---|
- ViewModel에서 Action이라는 enum을 통해 액션 전용 타입을 구현 후 action 메서드에서 케이스에 따라 비즈니스 로직을 실행하도록 한다.
- View에서는 viewModel의 사용자 액션과 일치하는 케이스에 대해 action 메서드만 호출 -> viewModel의 비즈니스 로직을 숨길 수 있다.