Skip to content

HomeTab의 View 구성 요소와 렌더링 입력을 분리한다 - #942

Merged
opficdev merged 2 commits into
developfrom
refactor/#880
Oct 28, 2026
Merged

opficdev merged 2 commits into
developfrom
refactor/#880

Conversation

@opficdev

@opficdev opficdev commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

🔗 연관된 이슈

🎯 의도

계산 프로퍼티로 구성한 내부 View는 그 안에서 읽은 상태가 바뀌면 부모 View의 body 전체가 다시 평가되는 구조

상태 변화로 재평가가 필요한 영역만 별도 View로 분리하고, 해당 상태를 부모가 아닌 분리한 View의 body에서 읽도록 구성하여 부모 body의 재평가 범위를 줄이는 것

📝 작업 내용

📌 요약

  • HomeView에서 상태를 읽는 영역을 같은 파일의 private View로 분리
  • SearchView에서 searchQuery를 읽는 조건을 SearchResults로 이동

🔍 상세

  • HomeView
    • 상태를 읽는 영역을 store를 전달받는 private View로 분리
      • HomeTodoSection: preferences, isPreferencesLoading, isTodoCategoryExpanded
      • HomeCreateButton: isNetworkConnected
      • HomeDevelopmentSummary, HomeDevelopmentGoals: 개발 목표 상태
      • HomeContentPicker: preferences, isPreferencesLoading
    • 반복되는 항목은 값만 전달받는 private View로 분리
      • HomeTodoCategoryLink, HomeContentPickerLabel
    • 상태와 무관한 제목과 검색 버튼, send만 호출하는 편집 버튼은 분리하지 않고 유지
    • 분리 후 HomeView의 body는 feature 상태를 읽지 않는 구조
  • SearchView
    • 부모 body에서 store.searchQuery로 결과 노출을 판단하던 조건을 SearchResults 내부로 이동
    • 기존 SearchField, SearchResults, RecentSearchQuries의 상태 읽기 구조는 유지
  • UI 계층, modifier 순서, 탐색 경로와 Store 소유권, 동작은 기존과 동일
  • State, Action, SideEffect, 모듈 의존성, 공개 API 변경 없음

📸 영상 / 이미지 (Optional)

Instruments 측정 (View Body)

  • 조건: Release 최적화(Staging 구성) 빌드, iPhone 18 Pro 시뮬레이터(iOS 27.0), View Body (Legacy), 변경 전후 각 5회 교차 측정 후 중앙값 비교, 괄호는 5회 측정 범위
  • 시나리오: 홈에서 Todo 카테고리 펼치기 ↔ 접기 10회, 검색 열기 ↔ 닫기 10회
  • 로그인된 계정의 실제 데이터 기준이며 검색어 입력은 측정 대상에서 제외

홈 화면 (카테고리 펼치기 ↔ 접기 10회)

대상 변경 전 횟수 변경 전 시간 변경 후 횟수 변경 후 시간
HomeView 47회 42.60ms (32.74 ~ 50.35) 22회 19.48ms (19.22 ~ 20.20)
HomeTodoSection - - 27회 2.31ms (2.15 ~ 2.68)
HomeCreateButton - - 1회 0.12ms (0.10 ~ 0.13)
HomeDevelopmentSummary - - 5회 2.32ms (2.23 ~ 2.40)
HomeDevelopmentGoals - - 5회 0.12ms (0.11 ~ 0.12)
HomeTodoCategoryLink - - 8회 0.44ms (0.42 ~ 0.55)
합계 47회 42.60ms (32.74 ~ 50.35) 68회 25.14ms (24.45 ~ 25.33)
  • HomeView body 평가 횟수가 47회에서 22회로 감소
  • 분리한 View가 추가로 평가되어 평가 횟수 합은 늘었으나, 한 번의 평가 비용이 작아 시간 합계는 감소
  • HomeContentPicker, HomeContentPickerLabel은 시나리오에서 평가 기록 없음

검색 화면 (검색 열기 ↔ 닫기 10회)

대상 변경 전 횟수 변경 전 시간 변경 후 횟수 변경 후 시간
SearchView 10회 2.70ms (2.09 ~ 2.87) 10회 2.30ms (2.24 ~ 3.01)
SearchResults - - 10회 0.16ms (0.15 ~ 0.18)
SearchField 11회 0.72ms (0.68 ~ 0.80) 11회 0.80ms (0.70 ~ 0.82)
RecentSearchQuries 10회 1.25ms (0.95 ~ 1.39) 10회 1.13ms (0.86 ~ 1.78)
합계 31회 4.40ms (3.75 ~ 4.97) 41회 5.04ms (3.95 ~ 5.43)
  • 검색어가 비어 있으면 변경 전에는 SearchResults를 만들지 않았고 변경 후에는 항상 만들어 평가
  • 합계 차이는 측정 범위가 겹쳐 차이로 보지 않음

@opficdev
opficdev merged commit 18cf1a2 into develop Oct 28, 2026
17 of 18 checks passed
@opficdev
opficdev deleted the refactor/#880 branch October 28, 2026 04:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HomeTab의 View 구성 요소와 렌더링 입력을 분리한다

1 participant