2024.08.06 ~ 2024.08.13
iOS의 Photos앱 클론 프로젝트
기존 사진앱과 흡사한 기능을 개발(달성률 약 78%)
방법 : 데이터 간 인스턴스 공유를 통해 메모리 사용을 최적화.
internal func loadAssets(){
//필터링,정렬 등 받아온 결괏값의 옵션을 부여할 수 있는 클래스
let fetchOptions = PHFetchOptions()
//날짜 순으로 내림차순
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
//Assets(항목)을 받아오는 메서드 (PHFetchResult 클래스 타입)
let fetchResult = PHAsset.fetchAssets(with: fetchOptions)
//1. Assets Results의 파라미터 (asset,index,stop) 중 Assets만 사용(일단은)
//2. 페이지를 차례로 넘기는 메서드를 새로 구현하여 사용
//3. 2번은 문제가 아니였기에 다시 처음부터 모든 Assets을 가져와 assets배열에 저장
let group = DispatchGroup()
let userInteractiveQueue = DispatchQueue.global(qos: .userInteractive)
let mainQueue = DispatchQueue.main
group.enter()
userInteractiveQueue.async{
defer{ group.leave() }
fetchResult.enumerateObjects { (asset, _, _) in
mainQueue.async{ [weak self] in
self?.assets.append(asset)
}
}
}
group.notify(queue: userInteractiveQueue){
mainQueue.async{ [weak self] in
self?.progress = false
}
}
//이미지 로딩 중일땐 UI가 제대로 작동하지 않아, 로딩 될때까지 Progress를 띄우고 완료되었을때 Progress disAppear하기 위한 로직
}
즐겨찾기 후 해당 항목 새로고침 구현 중 로직을 변경해야하는 문제
기존에는 처음에 받아온 항목 리스트를 get-only로 구현되어있었음.
하지만 즐겨찾기 및 삭제 기능을 위해 상태 변경 시 해당 항목이 즉시 반영되도록 구현하기 위해야함(get-only 리스트를 사용할 수 없음)
항목 리스트 분류를 분류.
필터 리스트 항목은 전체 항목에서 조건에 따라 필터링하여 얻을 수 있음(리스트를 새로 불러올 필요가 없음).
앨범 리스트 항목은 개별적으로 새 요청이 필요해서 번거로움이 존재.
enum TypeFilter를 사용하여 상황에 맞는 리스트를 반환했으나, get-only 리스트를 사용하지 않기 때문에 이벤트 발생 시 배열을 직접 변경해야 하는 수고가 있음.
또한, 전체 항목 → 필터 리스트 항목 또는 앨범 리스트 항목 → 필터 리스트 항목 요청 시 전체 항목을 계속 요청해야 함.
전체 항목을 처음 한 번만 캐싱하고, 인스턴스가 살아있는 동안 계속 사용할 수 있도록 수정.
앨범 리스트는 매번 새로 요청해야 하지만, 전체 항목과 필터 리스트에 대해서는 캐싱된 배열을 사용하도록 변경.
자신이 개발하기 쉬운 방법보다 사용자에게 더 직관적이고 편리한 서비스를 개발해야 한다.
개발을 하면서 본인이 개발한 것에 대해 "이 정도면 충분하다"는 생각이 들 때가 많았습니다. 하지만 그에 안도하지 않고, 타인의 시각에서 어떻게 보일지, 다른 유사 서비스와의 차별점은 무엇인지 계속해서 고민했습니다. 이를 통해 객관적으로 더 나은 서비스를 개발하기 위해 노력했습니다.
아직 내가 모르는 기술은 내가 알고 있는 기술보다 훨씬 많다.
개인적으로 또는 팀원들과 함께 여러 서비스를 구현해보며 많은 지식과 기술을 얻었다고 스스로 생각했습니다. 그러나 이번 과제를 진행하면서 처음 도전한 기술들인 동영상 처리, 대량의 데이터 트래픽 관리 방법 등의 여러 기술과 사용 방법을 조사해보니, 아직도 배워야 할 기술이 매우 많다는 것을 실감했습니다. 본인의 부족함을 항상 인지하고, 더 배우고 더 성장해야겠다는 다짐을 하게 되었습니다.
디자인도 좋지만 성능을 신경쓰자.
앱 개발을 결심한 이유가 여러 서비스를 경험하며 직접 이런 프로그램을 내 손으로 개발해보고 싶었기 때문입니다. 그래서인지 디자인 요소 개발에 많은 시간이 허비되고, 앱의 성능 최적화에 필요한 시간과 노력을 충분히 투자하지 못했다고 생각합니다. 앱을 개발하면서 무엇이 가장 중요한지, 그리고 내 약점을 파악할 수 있는 기회가 되었습니다.