️여기어때 Date·인원 선택 UI 만들기-SwiftUI Calendar Core & DateTravelerSelector 구조 재설계
프론트엔드
️여기어때 Date·인원 선택 UI 만들기-SwiftUI Calendar Core & DateTravelerSelector 구조 재설계
두줄요약
SwiftUI 기반 Date·인원 선택 UI를 도메인별 정책에 맞게 분리하고 공통 달력 Core로 재구성했습니다. LazyVGrid를 대체해 iOS 16 안정성과 렌더링 성능도 개선했습니다.
문제 상황
- 패키지, 국내숙소, 해외숙소, 찜목록마다 날짜·인원 선택 정책이 달라 단일 통합 달력으로 묶기 어려운 구조
- Range 모드와 선택 가능 기간, 비활성 조건이 도메인마다 달라 로직 분기 복잡도와 유지보수 부담 증가
- LazyVGrid와 GeometryReader 조합에서 iOS 16 스크롤 버그와 성능 저하 발생
구조와 흐름
- UI 레이어인 ScrollableCalendarView와 계산 레이어인 Calendar Core를 분리한 재설계
- Calendar Core에서 월 목록 생성, 7×6 그리드 정규화, DateViewData 생성과 변경분 갱신 처리
- DateSelectorModel과 CalendarRenderContext로 도메인 정책과 셀 상태 계산을 캡슐화
해결 방법
- 도메인별 Date·인원 선택 화면은 분리하고, 달력 셀과 스타일은 공통 UI 컴포넌트로 재사용
- LazyVGrid 대신 직접 7열 Grid를 구성하고 GeometryReader 사용을 최소화해 iOS 16 안정성 확보
- 전체 월 데이터를 미리 계산하고 캐싱해 diffing 비용을 줄이며 변경된 셀만 갱신
