내가 좋아하는 메뉴에는 하트를! ❤️
달력에 식단을 기록하고 자신이 좋아하는 식단을 즐겨찾기에 추가하는 기능을 담은 서비스 입니다.
- 개발 기간 : 2023. 05. 18 ~ 2023. 05. 30
- 참여 인원 : 개인 프로젝트
- 디자인 패턴 : MVC
메인 화면 | 식단 추가 화면 | 일별 식단 리스트 |
---|---|---|
![]() |
![]() |
![]() |
즐겨찾기가 추가된 달력 | 즐겨찾기 리스트 확인 | 식사 알림 설정 |
---|---|---|
![]() |
![]() |
![]() |
- 날짜 변경시 자연스러운 사용자 경험을 제공하기 위해
UICollectionViewDiffableDataSource
을 활용했어요. UICollectionViewDiffableDataSource
는 이전 상태와 변경된 데이터를 비교해 필요한 부분만 업데이트 함으로써 불필요한 UI 갱신을 방지하여 성능을 최적화할 수 있고 애니메이션 효과를 적용할 수 있어요.
![](https://private-user-images.githubusercontent.com/85678496/272647415-0881a6ae-5b9f-4f88-9881-2d219e6f13ce.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NTk1NDUsIm5iZiI6MTczODk1OTI0NSwicGF0aCI6Ii84NTY3ODQ5Ni8yNzI2NDc0MTUtMDg4MWE2YWUtNWI5Zi00Zjg4LTk4ODEtMmQyMTllNmYxM2NlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA3VDIwMTQwNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE1OWE2ZTIzMWYzM2JlOTc3YmIyNzQ3ODFlYjk4Yzg1NjFlOGM0NzFhMzM5M2IxZDZmM2E3YjFhMGMwOTk5YmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.y-PHCGc_cUPxtoFhSvmSsN67BEmVMcjKFcNVd0Jszd0)
- MVC 패턴의 한계로써 ‘하나의 책임을 가진 객체'에 어울리지 않는 Massive한 Controller 문제 해결을 위해 고심했어요.
- 객체지향 코드를 구현하기 위해 CalendarViewController를 최소한의 역할로 분류하여 4개의 객체를 독립적으로 생성했어요.
- 분리된 객체들이 모두 CalendarViewController와 상호작용을 했을 시 발생하는 복잡도를 고려하여 이들을 관리하는 역할을 수행하는 CalendarManager 객체 도입했어요.
- 앱이 처음 실행되었을 때, 오늘 날짜에 강조 표시를 구현하고 싶었어요.
- UICollectionViewCell의
isSelected
속성을 활용했어요. - UICollectionView의 CellProvider 시점에 오늘 날짜인지 판별하고, 오늘 날짜가 맞다면
selectItem(at:animated:scrollPosition:)
메서드를 사용해 셀의isSelected
속성을 간접적으로 변경했어요.