iTunes API를 활용하여 음악, 앨범, 팟캐스트를 검색하고 상세 정보를 확인할 수 있는 iOS 앱입니다.
음악에 관해서는 미리듣기가 재생됩니다.
RxSwift와 MVVM 패턴을 기반으로 비동기 데이터 흐름을 관리하고, 효율적인 UI 업데이트를 구현했습니다.
| 홈화면/디테일화면 | 검색화면/디테일화면 |
|---|---|
protocol ViewModelType {
associatedtype Input
associatedtype Output
func transform(input: Input) -> Output
}
struct Input {
let viewDidLoad: Observable<Void>
}
struct Output {
let sections: Driver<[HomeSectionModel]>
let isLoading: Driver<Bool>
let errorMessage: Signal<String>
}
NetworkService → API 요청 담당ITunesEndpoint → API URL 구성ITunesResponse → 응답 모델🔹 특징
Observable.just(item) vs input.viewDidLoad.map { item }item은 이미 생성 시점에 존재하는 값이기 때문에, 단순히 값만 전달하는 목적이라면 Observable.just(item)으로도 구현할 수 있음Observable.just(item)
input.viewDidLoad
.map { _ in self.item }
viewDidLoad 이벤트가 발생했을 때를 기준으로 item을 방출하도록 변경함
원래 의도대로 화면이 준비된 시점에 맞춰 데이터를 전달한다는 흐름을 명확하게 표현할 수 있음
이 프로젝트는 MVVM + Input / Output 패턴을 기반으로 구성되어 있기 때문에 단순한 값 전달보다도 이벤트를 기준으로 데이터 흐름을 관리하는 구조를 유지하는 것이 더 중요하다고 판단해서 수정함
Observable.just(item)input.viewDidLoad.map { item }viewDidLoad 이벤트 시점에 값 방출viewDidLoad를 트리거로 사용하는 방식으로 결정함| 디테일 화면 뮤비 재생 |
|---|
![]() |