SwiftUI로 Date·인원 선택 UI를 유연하게!
by DD
5개월 전
조회수 7
도메인별 정책 차이로 인해 단일 UI 컴포넌트 적용에 어려움이 있었음
Calendar Core와 ScrollableCalendarView 분리를 통해 UI 재사용성 확보
LazyVGrid 문제 해결을 위해 Grid 구조 재설계 및 Precompute & Cache 전략 도입
Calendar Core 아키텍처 설계
Calendar Core는 Month 리스트 생성, 날짜 셀(DateViewData) 생성, 상태 갱신을 담당한다. 구체적으로 buildDateViewData 함수를 통해 각 셀의 상태를 결정하고, CalendarRenderContext를 활용하여 도메인별 정책을 캡슐화한다. 따라서 UI 재사용성과 유지보수성을 동시에 확보했다.
LazyVGrid 문제 해결 전략
iOS 16에서 LazyVGrid의 성능 문제를 해결하기 위해 Grid 구조를 직접 구현했다. GeometryReader 사용을 최소화하고, Precompute & Cache 전략을 통해 초기 렌더링 속도를 개선했다. 반면, 이러한 최적화는 개발 복잡도를 증가시키지만, 결과적으로 UI 안정성과 성능 향상을 달성했다.
TravelerView를 활용한 인원 선택 UI
TravelerView는 TravelerViewData를 통해 도메인별 정책을 주입받아 렌더링한다. 따라서 UI 컴포넌트는 단순하게 유지하면서, 다양한 도메인에서 공통 UI를 재사용할 수 있다. 결과적으로 코드 중복 감소와 유지보수 용이성을 확보했다.