-
View와 비즈니스 로직 분리를 위해 MVVM 도입
-
추후 서버 도입 가능성을 고려해 Repository Pattern을 적용하기 위한 Data Layer 도입
-
ViewModel의 복잡도가 증가할 것을 예상하여 Domain Layer를 두어 Use Case에서 처리
-
테스트 가능한 구조를 만들기 위해 Domain Layer에 Repository Interface 구현
- MVVM 패턴에서 View와 ViewModel의 바인딩을 위해 Combine을 활용했습니다.
- Combine은 First Party 라이브러리라는 점에서 안정성과 지원이 뛰어나며, RxSwift에 비해 성능적인 이점이 있어 RxSwift 대신 Combine을 도입했습니다.
- 비동기 프로그래밍을 위해 Swift Concurrency(async/await)를 활용하였습니다.
- 기존의 콜백 기반 비동기 프로그래밍은 코드의 깊이가 증가해 가독성을 해치고, completion 호출을 누락하는 등 휴먼 에러가 발생할 가능성이 있었습니다.
- Swift Concurrency을 도입하여 위 단점을 보완하여 코드 가독성과 안정성을 높이고자 했습니다.
- Local DB로 Core Data와 FileManager를 함께 활용했습니다.
- Core Data는 책과 페이지 간의 관계를 유지하기 위해 사용하며, 각 페이지는 멀티미디어 데이터를 포함할 수 있습니다.
- 멀티미디어를 Core Data에 직접 저장하면, 책을 펼칠 때 모든 데이터를 한꺼번에 불러와 성능 저하가 발생할 수 있습니다. 이를 방지하기 위해 멀티미디어는 FileManager를 통해 디바이스에 저장하고, Core Data에는 해당 멀티미디어의 URL만 문자열로 저장했습니다.
- 이러한 방식으로 페이지 로드 시 URL만 불러와 메모리 사용을 줄이고, 필요한 멀티미디어는 개별적으로 로드하여 효율성을 높였습니다.
1. 사진 - [Phots] 이미지 편집하기
2. 동영상 - [AVKit] 내 앨범의 비디오를 업로드하기
3. 오디오 - [AVFAudio] 녹음해서 오디오를 업로드하기
4. 멀티 미디어를 담고 있는 TextView 저장하기 - 스냅샷 기반 저장하기
〰️ 부산 워크샵 단체사진 〰️
🎨 김영현 | 🥇 박효준 | 👓 안윤철 | 😽 임정현 |
집주인 내 골드핸즈(= 금손) 초고수 디자이너 영리아나 그란데 영카소, 영켈란젤로, 영흐 |
우리팀 리-더 발표 초-고수 황금막내 열정보이🔥 문서화 장인 |
데(DevOps) 윤철 분위기 메이커 아이디어 뱅크 동의, 인정, 공감 장인 돌리기 장인 (조리돌림) 우리팀 MZ |
살아있는 네이버 클로바 루루 집사 스티브잡스, 스티브워즈니악, 스티브 임정현 Let's Go |
@k2645 | @kyxxn | @yuncheol-AHN | @iceHood |