핵심요약
여기어때 앱의 복잡한 검색 화면 구조를 모듈 분리 및 SwiftUI 전환을 통해 개선했습니다. PageTransitionView를 개발하여 탭 이동 시 중간 페이지를 건너뛰는 부드러운 화면 전환을 구현하고, 데이터 변환 로직 분리 등으로 유지보수성을 높였습니다.
여기어때 앱 검색 화면 구조 개선: 모듈 분리 및 SwiftUI 전환
문제점 및 요구사항
- 기존 문제: 검색 홈과 결과 화면이 단일 모듈에 묶여 책임 모호, 빌드 범위 증가, 의존성 꼬임 발생.
- 요구사항: 4개의 탭(국내숙소, 해외숙소, 항공, 레저티켓)별 도메인 특성 반영, 공통 기능(최근 검색, 에러 처리 등) 관리, 사용자 경험 개선.
모듈 분리 및 구조 재설계
- 모듈 분리:
GCSearch모듈을GCSearchHome,GCSearchResult로 분리하여 책임 명확화 및 빌드 효율성 증대. GCSearchHome내부 구조: 컨테이너, 공용 컴포넌트, 탭(도메인) 레벨로 계층화하여 확장성 및 독립성 확보.- 탭 상태 관리:
TabInfoAppModel프로토콜을 정의하여 각 탭의 상태 모델을 추상화하고, SwiftUI View에서 일관되게 처리. - 데이터 변환: 도메인별
Converter를 분리하여 데이터 변환 로직을 위임, 코드 복잡성 및 유지보수 용이성 증대. - 단방향 데이터 흐름: SwiftUI 환경에서 ReactorKit 패턴을 유지하여 상태 변경 추적 용이성 및 안정성 확보.
중간 페이지 건너뛰는 페이지 전환 구현 (PageTransitionView)
- 문제점: 기본
TabView사용 시 탭 이동 시 중간 페이지가 노출되어 부자연스러운 전환 발생. - 해결 방안:
PageTransitionView개발하여 중간 페이지 없이 목표 페이지로 즉시 전환 구현. - 주요 기능: 제네릭 View 기반,
currentIndex,targetIndex관리, 슬라이드 및 페이드 전환 애니메이션, 사용자 터치 방지, 콜백 기능. - 구현 방식:
ZStack을 활용하여 현재 및 목표 페이지만 화면에 노출시키고,offset,opacity조절을 통해 전환 애니메이션 구현.
결과 및 기대 효과
- 구조적 개선: 모듈 분리와 계층적 구조 설계를 통해 유지보수성 및 확장성 향상.
- UX 향상: 부드럽고 빠른 탭 전환으로 사용자 경험 개선.
- 개발 생산성: SwiftUI 전환 및 단방향 데이터 흐름 적용으로 개발 생산성 및 안정성 증대.