UIKit Navigation Guide

탭, 네비게이션, 모달 전환 차이

세 전환은 "화면 이동 방식"이 아니라 "정보 구조와 사용자 흐름 모델"이 다르다. 잘못 고르면 구현은 되지만 UX 일관성과 상태 관리가 빠르게 무너진다.

IA-driven transition Ownership and state Knowledge item #26
학습 날짜

기록 없음

한눈에 비교

전환 방식핵심 목적상태 모델대표 컴포넌트
탭(Tab) 상위 카테고리 간 병렬 이동 탭별 독립 히스토리/문맥 유지 `UITabBarController`
네비게이션(Push/Pop) 깊이 있는 계층 탐색 스택 기반 히스토리 `UINavigationController`
모달(Present/Dismiss) 현재 흐름 위에 임시 과업 수행 기존 흐름 위에 오버레이 `present(_:animated:)`

언제 탭을 쓰나

  • 홈/검색/보관함처럼 동등한 1단계 목적지가 있을 때
  • 사용자가 탭을 바꿔도 이전 탭 상태를 유지해야 할 때
  • 기능이 "병렬" 구조일 때

언제 네비게이션을 쓰나

  • 목록 -> 상세 -> 하위 상세처럼 계층을 따라 들어갈 때
  • 뒤로 가기가 정보 탐색의 핵심일 때
  • 화면 깊이가 UX의 자연스러운 표현일 때

언제 모달을 쓰나

모달은 "새 깊이"가 아니라 "임시 분기"다. 탐색 계층을 모달로 누적하면 back model이 불안정해진다.

난이도 높은 설명: 상태 복원과 전환 정책

// 탭마다 독립 navigation stack 유지 (개념 예시)
let homeNav = UINavigationController(rootViewController: HomeVC())
let searchNav = UINavigationController(rootViewController: SearchVC())
let profileNav = UINavigationController(rootViewController: ProfileVC())

let tab = UITabBarController()
tab.viewControllers = [homeNav, searchNav, profileNav]

// 모달은 흐름 위에 임시 과업으로
present(FilterViewController(), animated: true)

자주 하는 실수

  • 탐색 계층을 모달로 계속 열어 화면 스택 의미가 붕괴
  • 탭 전환 시마다 루트부터 재생성해 사용자 문맥 유실
  • push로 열어야 할 상세를 탭 전환으로 처리해 UX 혼란 유발

실무 체크리스트

  • 이 전환이 "병렬", "계층", "임시 과업" 중 무엇인지 먼저 분류했는가?
  • 복귀 경로(back/dismiss)가 사용자 기대와 일치하는가?
  • 탭별 네비게이션 상태를 독립적으로 보존하는가?
  • 모달 종료 시 원래 화면 상태 복원이 자연스러운가?

Q

이 섹션은 위에서 나온 질문뿐 아니라, 새로운 개발적 지식과 시니어라면 알아야 할 내용까지 추가한다.