- 상품 검색 • 좋아요 • 상세페이지 조회 기능
- 상품 이미지 • 쇼핑몰 • 가격 정보 확인 및 필터 기능
- 좋아요 목록 관리 • 실시간 검색 기능
- 최소 버전 : iOS 16.0
- 개발 인원 : 1명
- 개발 기간 : 2023.09.07 ~ 2023.9.16 (1주)
- 기타 : Dark Mode 지원
UIKit,CodeBaseUI,SPMMVC,Singleton,Repository PatternAutolayout,CompositionalLayoutSnapkit,Kingfisher,URLSessionRealm,Webkit,Lottie
- 네이버 Open API를 이용한 쇼핑 검색,
Offset-based Pagination구현 RealmLocal DB를 이용한 좋아요 목록 관리 • 실시간 검색 기능URLSession과Enum을 이용한 REST API 통신 캡슐화Kingfisher를 이용한 이미지 로드 및 최적화NotificationCenter를 이용한 좋아요 상태 동기화 처리Lottie를 이용한 Animation LaunchScreen 구현
- 문제 상황 : 네이버 쇼핑 API를 통해 가져온 원본 이미지를 이미지 뷰에 표기한 경우, 메모리 오버헤드로 인해 이미지가 제대로 로드되지 않거나 런타임 에러가 발생함.
- 해결 방법 : Kingfisher를 이용해 이미지를 효과적으로 로드하고, 메모리 사용을 최적화함.
extension UIImageView {
func setImage(withURL imageUrl: String) {
// 캐싱 목적으로 원본 이미지 디스크에 저장
var options: KingfisherOptionsInfo = [
.cacheOriginalImage
]
// 메모리 사용량을 줄이기 위해서 이미지 다운샘플링 처리
options.append(.processor(DownsamplingImageProcessor(size: CGSize(width: 100, height: 100))))
// 이미지 품질을 향상 시키기 위해서 기기 화면에 맞는 배율 지정
options.append(.scaleFactor(UIScreen.main.scale))
self.kf.setImage(
with: URL(string: imageUrl),
placeholder: UIImage(named: "shoppingCart"),
options: options
)
}
}- 문제 상황 : TableView에서 셀이 재사용 될 때, 이전의 데이터와 새로운 데이터가 뒤섞이거나 UI가 깜빡거리는 현상이 발생함.
- 해결 방법 : prepareForReuse 메서드를 이용해 재사용 되는 셀의 상태를 초기화해서 문제를 해결하고, 메모리 누수를 방지함.
final class SearchCollectionViewCell: BaseCollectionViewCell {
override func prepareForReuse() {
imgView.image = .none
mallNameLabel.text = ""
titleLabel.text = ""
lPriceLabel.text = ""
}
}![]() |
![]() |
|---|---|
상품 검색/필터 기능 |
좋아요 기능, 다크모드 |
- [Feat] 새로운 기능 구현
- [Style] UI 디자인 변경
- [Fix] 버그, 오류 해결
- [Refactor] 코드 리팩토링
- [Remove] 쓸모 없는 코드 삭제
- [Rename] 파일 이름/위치 변경
- [Chore] 빌드 업무, 패키지 매니저 및 내부 파일 수정
- [Comment] 필요한 주석 추가 및 변경
- [Test] 테스트 코드, 테스트 코드 리펙토링


