배경
TodoListView의 기본 목록은 페이지네이션으로 item이 계속 누적되고, 각 행에서 상대 시간, tag layout, 고정·완료·삭제 action과 Todo 상세 이동을 처리함.
기존 List의 동작을 유지하면서 #814의 공용 CollectionUI를 적용하고 동일 조건에서 성능 차이를 측정할 필요가 있음.
선행 이슈
작업 범위
PresentationShared target에 Libraries/CollectionUI 직접 의존성 추가
todoListContent의 기본 List를 CollectionUI 기반 collection으로 전환
UICollectionViewDiffableDataSource 사용
UICollectionViewCompositionalLayout 사용
- item identifier는 전체 모델이 아닌 안정적인
todo.id 사용
- feature가 소유하는 순수 UIKit Todo cell과
UICollectionView.CellRegistration 구현
- section별 layout provider로 plain list section과 filter header 구성
- filter header의 가로 scroll, safe-area 배치, iOS 17~26 동작 보존
- 다음 페이지 추가는 snapshot item append로 반영
- 고정·완료·표시 내용 변경은
reconfigureItems(_:)로 해당 ID만 갱신
- 삭제는 snapshot에서 해당 ID만 제거
UICollectionViewDataSourcePrefetching으로 다음 페이지 요청
hasMore와 isLoading 조건을 유지하고 중복 loadNextPage 요청 방지
- 여러 행의
RelativeTimeText 갱신을 하나의 화면 단위 scheduler로 통합하되 표시 결과 보존
- cell은 화면 표현에 필요한 값과 callback만 수신하고 Store·Coordinator를 보관하지 않도록 구성
#812의 렌더링 입력 축소 원칙 준수
기존 동작 보존
- Todo 선택과 compact/non-compact routing
todoDetailPreview 기반 길게 누르기 미리보기
- 좌측 swipe의 고정·완료 전환
- 우측 swipe의 삭제와
ToastPresenter 삭제 취소
- filter 초기화, 정렬, 완료 상태 filter
- pull-to-refresh, loading overlay, 빈 상태
- 현재 검색 mode와 검색 결과
ScrollView는 이번 전환 대상에서 제외하고 동작만 회귀 검증
성능 측정
#814의 공통 절차에 따라 기존 List와 적용 후 collection을 비교함.
- 데이터 건수: 20, 100, 500, 1,000
- 시나리오
- 최초 표시
- 60초 연속 scroll
- 다음 페이지 append
- 고정·완료
reconfigureItems(_:)
- 삭제와 삭제 취소
- 기록
- CPU
- 최대·안정 상태 memory
- hitch 수와 누적 시간
- 최초 표시와 page append 반영 시간
- 기기, OS, build configuration, 반복 횟수
- 각 시나리오 5회 반복 후 중앙값과 최대값을 이슈 댓글 또는 PR 본문에 표로 기록
- 개선·동일·악화 판정과 UIKit 구현 유지 여부 기록
완료 조건
제외 범위
- Todo fetch·search·pagination Domain/Data 계약 변경
- 검색 결과 container의 UIKit 전환
- Todo 생성·수정·상세 흐름 변경
- 다른 화면의
List 전환
배경
TodoListView의 기본 목록은 페이지네이션으로 item이 계속 누적되고, 각 행에서 상대 시간, tag layout, 고정·완료·삭제 action과 Todo 상세 이동을 처리함.기존
List의 동작을 유지하면서 #814의 공용CollectionUI를 적용하고 동일 조건에서 성능 차이를 측정할 필요가 있음.선행 이슈
작업 범위
PresentationSharedtarget에Libraries/CollectionUI직접 의존성 추가todoListContent의 기본List를CollectionUI기반 collection으로 전환UICollectionViewDiffableDataSource사용UICollectionViewCompositionalLayout사용todo.id사용UICollectionView.CellRegistration구현reconfigureItems(_:)로 해당 ID만 갱신UICollectionViewDataSourcePrefetching으로 다음 페이지 요청hasMore와isLoading조건을 유지하고 중복loadNextPage요청 방지RelativeTimeText갱신을 하나의 화면 단위 scheduler로 통합하되 표시 결과 보존#812의 렌더링 입력 축소 원칙 준수기존 동작 보존
todoDetailPreview기반 길게 누르기 미리보기ToastPresenter삭제 취소ScrollView는 이번 전환 대상에서 제외하고 동작만 회귀 검증성능 측정
#814의 공통 절차에 따라 기존
List와 적용 후 collection을 비교함.reconfigureItems(_:)완료 조건
List가 제거됨UICollectionViewDiffableDataSource와UICollectionViewCompositionalLayout이 모두 적용됨제외 범위
List전환