프로젝트/Film-in (5) 썸네일형 리스트형 SwiftUI에서 DIContainer를 활용한 의존성 주입(Dependency Injection) SwiftUI로 Film-in 프로젝트를 의존성 주입(DI, Dependency Injection)을 어떻게 구현할 지 고민하게 되었다.특히, UIKit과는 달리 SwiftUI에서는 @StateObject, @ObservedObject, @EnvironmentObject 등을 활용해상태관리를 해야 했기에의존성 주입을 어떻게 구현할 지에 대해 고려가 필요했다. 처음에는 SOLID 원칙을 준수하면서 유지보수성을 높이는 방향으로 설계를 진행했지만, SwiftUI의 제약으로 인해설계의 변경이 필요했다. 이 글에서는 DIContainer 설계 과정에서 고려했던 사항과 결론을 공유하고자 한다. 1️⃣ UIKit에서 적용했던 의존성 주입 적용 방식최근 Clean Architecture를 적용했던 UIKit 프로젝트.. CarouselView - DragGesture -> ScrollView -> UICollectionView 현재 내 프로젝트의iOS Target Version은 16.4이며프레임워크는 SwiftUI를 사용중이다. Horizontal 방향으로 Snap을 스크롤을 넘기는CarouselView 구현을 진행했다. Target Version을 17.0으로 잡았다면17.0에 새로 나왔던 기능중 하나인 ScrollTargetBehavior를 사용하여간단하게 구혔했을 것이다.https://developer.apple.com/documentation/swiftui/scrolltargetbehavior ScrollTargetBehavior | Apple Developer DocumentationA type that defines the scroll behavior of a scrollable view.developer.appl.. 메모리 사용량을 줄이기 위한 노력 - 이미지 다운샘플링 프로젝트의 특성상이미지를 많이 출력하기 때문에 View가 쌓일 수록이미지에서 사용되는 메모리의 사용량은 기하급수적으로 증가할 수밖에 없다. 구현을 진행하면서계속 용량 줄려야지, 줄여야지 하면서 계속 미뤄왔던이미지 다운샘플링 구현 방식에 대해 간단히 진행해보겠다. Apple에서 진행했던 WWDC 18 세션 중 두 세션을 참고했다.WWDC 18 iOS Memory Deep Dive 🔗WWDC 18 Image and Graphics Best Practices 🔗 1️⃣ 이미지 메모리 사용량 계산메모리의 사용량은 파일 크기가 아닌 이미지의 크기로 계산이 이루어진다. 이미지의 메모리 사용량은 아래 공식으로 계산된다.Memory Usage (Bytes) = Width(pixel) × Height(pixel) .. Memory Leak - Combine Sink, Swift Concurrency 시뮬에서 앱을 빌드해보면서 뭔가 이상했다.왜 객체의 init메서드는 호출이 되는데 deinit 메서드는 호출이 되지 않지...? 앱을 사용해보면서 트래킹한 결과메모리 Leak이 발생하고 있는 것을 확인할 수 있었다. 상황을 생각해 봤을 때 View에서 일어나는 Action이View가 Appear 되는 시점에 viewModel에 task가 되었라는 Action을 취하고.task { viewModel.action(.viewOnTask)} 구독을 통해 영화 상세 정보를 Fetch 해오게 된다.input.viewOnTask .sink { Task { [weak self] in guard let self else { return } await fetchMovieInfo() } } .store(in: &.. 메모리 사용량을 줄이기 위한 노력 - Kingfisher 사용 중 일어난 일 1️⃣ 메모리가 줄어들지는 않고 쌓이기만 하는 이유내 앱은 보다시피 이미지의 사용량이 많아 기본적으로메모리의 사용량이 높다. 뒤로가기 버튼을 누른다 하더라도메모리 사용량이 줄어들기는 커녕 더 늘어났다. 늘어난 건 둘째치고 왜 화면을 나갔는데 줄어들지 않는걸까?그 이유는 바로 Kingfisher의 이미지 캐싱 기능이었다... 2️⃣ 단순하게 메모리 사용량을 줄여버린 나정말 1차원적인 생각을 해버린 나는단순하게 그러면 캐싱한 데이터를 메모리에서 지워버리면 되는 거 아닌가?라는 안일한 생각을 해버리게 되면서 뷰가 disappear 상태가 될 경우 캐싱 메모리를 비워버렸다. 뒤로가기 버튼을 눌렀더니메모리가 100MB 정도 줄었다! 하지만 예상하지 못한 결과를 가져온 것이다.Push하고 Pop하는 경우 캐시에서 .. 이전 1 다음