- GitHub Search API를 이용한 Repository 검색 앱
pod install
클린 아키텍처
- Data Layer : 백엔드 or 로컬 데이터로부터 데이터를 가져오는 책임을 갖습니다. DTO, Repository
- Domain Layer : 앱의 비즈니스 로직을 담당합니다. UseCase(Service)
- Presentaion Layer : UI 로직 관련 책임을 갖습니다. MVVM 패턴을 활용했습니다.
Repository는 서버로 부터 온 Entity를 Service에게 리턴해주는 역할
- Repository → (Entity) → Service →
Service는 Entity받아서 Logic에서 쓸 수있는 Model로 바꿔주는 역할(핵심 비즈니스 로직)
- (Entity) → Service → (Model) →
ViewModel은 Model을 받아서 View에서 쓸수 있게 ViewModel로 바꿔주는 역할
- (Model) → ViewModel → (ViewModel) → View
View는 ViewModel만 바라보면 됨, 가장 중요한건 모든 방향성 일관적
Framework: UIKit, RxSwift
Architecture: Clean Architecture
Design Pattern: MVVM
Branch Model: GitHub-Flow(master-feature)
Library: RxCocoa, RxRelay, SnapKit, Then, KingFisher, Realm
- SnapKit : Layout
- RxSwift/RxCocoa : 비동기 처리
- Kingfisher : 이미지 처리
- Realm : 영속 데이터 저장
- 검색어 입력 후, 검색 결과를 보여 줍니다.
- 검색어가 비어있을 시, 최근 검색어를 최대 10개까지 보여 줍니다.
- 최근 검색어는 날짜기준으로 내림차순 정렬합니다.
- 최근 검색어 ‘삭제’ 또는 ‘전체삭제’가 가능합니다.
- 최근 검색 내역은 앱 재시작 시에도 유지됩니다.
- 최근 검색어 선택 시, 검색 결과를 보여줍니다.
- 검색어 입력 시, 자동완성을 보여줍니다.
- 자동완성 노출 시, 검색 날짜를 같이 보여줍니다.
- 자동완성은 최근 검색어에서 추출하여 사용합니다.
- 검색 결과를 List 형태로 보여줍니다.
- 총 검색 결과 수를 보여줍니다.
- 저장소 정보를 보여줍니다.
- 검색 결과 선택 시, WebView 를 통해 저장소로 이동합니다.
- Scroll 중간에 Next Page를 미리 호출합니다.
- Next Page를 로딩할 때, 로딩 상태를 보여줍니다.
- https://api.github.com/search/repositories?q={keyword}&page={page}
RepositoryResponseDTO
- totalCount
- RepositoryItemResponseDTO
RepositoryItemResponseDTO
- title : item.name
- RepositoryOwnerResponseDTO
RepositoryOwnerResponseDTO
- Thumbnail : owner.avatar_url
- Description : owner.login
- URL : owner.url