UINavigationController는 iOS 앱 개발에 사용되는 UIKit 프레임워크의 핵심 구성 요소로, 여러 뷰 컨트롤러(View Controller)를 계층적으로 관리하는 컨테이너 뷰 컨트롤러입니다. 화면 간의 내비게이션을 관리하는 컨트롤러로, 화면 전환을 쉽게 구현할 수 있도록 도와줍니다. 앱 내에서 화면을 이동하고, 뒤로 돌아가거나, 일련의 단계를 거쳐 콘텐츠를 탐색하는 기능을 제공합니다. 보통 UINavigationController 클래스가 사용되며, 스택 기반 구조로, 각 화면을 스택에 푸시(push)하거나 팝(pop)하여 화면을 전환하고 쌓아 올리며 관리하는 역할을 합니다. 가장 대표적인 기능은 화면 간의 스택 기반 내비게이션을 제공하는 것입니다.
주요 특징 및 기능
- 내비게이션 스택 : UINavigationController는 pushViewController메서드를 통해 새로운 뷰 컨트롤러를 스택에 쌓고, popViewController를 통해 스택에서 제거한다. 마치 책을 쌓고 꺼내는 것과 같은 구조로, 가장 위에 있는 뷰 컨트롤러만 사용자에게 보인다.
- 스택 구조 : UINavigationController는 LIFO(Last-In, First-Out) 구조인 내비게이션 스택에 뷰 컨트롤러들을 스택(Stack) 형태로 관리한다. 새로운 화면으로 이동(push)하면 스택의 맨 위에 뷰 컨트롤러가 쌓이고, 이전 화면으로 돌아가기(pop)를 하면 스택의 맨 위 뷰 컨트롤러가 제거된다.
push : 화면을 쌓아 올리며 이동. 새로운 뷰 컨트롤러를 스택의 맨 위에 추가한다. 이로 인해 화면이 전환된다.
navigationController?.pushViewController(nextViewController, animated: true)
pop : 화면을 꺼내며 이전 화면으로 이동. 스택의 맨 위 뷰 컨트롤러를 제거하여 이전 화면으로 돌아간다.
navigationController?.popViewController(animated: true)
- 루트 뷰 컨트롤러(Root View Controller) : 내비게이션 스택의 가장 아래에 위치하는 첫 번째 뷰 컨트롤러이다. UINavigationController의 시작점이 되며, UINavigationController를 초기화할 때 지정 한다. 스택에서 제거되지 않는다.
- 내비게이션 바(Navigation Bar) : 화면 상단에 자동으로 표시되는 영역이다. 현재 화면의 제목, 뒤로 가기 버튼, 그리고 좌우에 커스텀 버튼을 추가할 수 있는데, 원하는 경우 사용자 정의 버튼을 포함할 수 있다. 사용자가 뒤로 가기 버튼을 누르면 자동으로 이전 화면으로 돌아간다. UINavigationController는 스택의 변화에 따라 이 바를 동적으로 업데이트한다. 내비게이션 바를 통해 사용자가 현재 위치를 알 수 있다.
- 툴바(Toolbar) : 내비게이션 바 아래에 추가적으로 표시할 수 있는 바이다. 기본적으로 숨겨져 있으며, 필요에 따라 UINavigationController의 toolbar 속성을 통해 표시할 수 있다.
- 커스터마이징 : 내비게이션 바의 스타일을 변경하거나 버튼을 추가하여 앱의 UI를 더욱 세밀하게 조정할 수 있다.

NavigationController 사용 방법
- Embedded in NavigationController : 스토리보드에서 뷰 컨트롤러를 선택한 후, Xcode 메뉴에서 Editor > Embed In > Navigation Controller를 선택 > 해당 뷰 컨트롤러가 NavigationController에 포함된다.
- 세그(Segue) : 화면 이동 시 'Show' 세그를 사용하면 NavigationController가 자동으로 다음 뷰 컨트롤러를 스택에 추가하고 화면을 전환한다.
- 코드 구현
- 생성 : 앱의 진입점인 AppDelegate 또는 SceneDelegate에서 UIWindow의 rootViewController를 UINavigationController로 설정한다. UINavigationController를 초기화할 때 rootViewController를 지정한다.
- 화면 이동 : self.navigationController?.pushViewController(nextViewController, animated: true) 메서드를 사용하여 다음 화면으로 이동할 수 있다.
- 뒤로 가기 : self.navigationController?.popViewController(animated: true) 메서드를 사용해 스택의 맨 위 뷰 컨트롤러를 제거하여 이전 화면으로 돌아갈 수 있다.

UINavigationController가 제공하는 프로퍼티 및 메서드
- viewControllers : 현재 내비게이션 스택에 있는 뷰 컨트롤러들의 배열이다.
- pushViewController(_:animated:) : 새로운 뷰 컨트롤러를 스택에 추가한다.
- popViewController(animated:) : 스택의 맨 위 뷰 컨트롤러를 제거하여 이전 화면으로 돌아간다.
- popToRootViewController(animated:) : 스택의 맨 위 뷰 컨트롤러부터 루트 뷰 컨트롤러까지 모두 제거하여 한 번에 처음 화면으로 돌아간다.
- navigationBar : UINavigationBar 객체에 접근하여 외관을 커스텀할 수 있다.
- toolbar : 하단에 표시되는 UIToolbar 객체에 접근할 수 있다. 기본적으로는 숨겨져 있다.

UINavigationController는 다음과 같은 상황에서 주로 사용된다.
- 설정 앱처럼 계층적으로 구성된 메뉴를 탐색할 때.
- 메인 화면에서 세부 정보 화면으로 이동하고, 다시 돌아오는 구조를 구현할 때.
- 사용자에게 일련의 단계적인 정보를 보여줄 때.
UINavigationController는 주로 화면 간 이동이 필요한 앱에서 많이 사용된다. 예를 들어, 리스트에서 상세 페이지로 이동하거나, 계층 구조를 가진 앱에서 각 화면을 이동할 때 유용하다. NavigationController가 없는 앱은 화면 전환 시 present 메서드를 사용한다. 이 방식은 화면을 덮는(Modal) 형태로 전환되기 때문에, 사용자가 뒤로 돌아가려면 별도의 버튼을 만들어 직접 이전 화면을 dismiss 해야 하는 번거로움이 있다. NavigationController는 이러한 계층적인 화면 관리를 자동화하여 사용자 경험을 크게 향상시키며, NavigationController는 iOS 앱에서 복잡한 화면 구조를 쉽게 관리할 수 있게 도와주는 중요한 요소이다.
참고 : https://developer.apple.com/documentation/uikit/uinavigationcontroller
UINavigationController | Apple Developer Documentation
A container view controller that defines a stack-based scheme for navigating hierarchical content.
developer.apple.com
'IOS > iOS' 카테고리의 다른 글
| [iOS] iOS 앱 하단 탭 막대(Tab Bar) / UITabBarController (0) | 2025.08.15 |
|---|---|
| [iOS] iOS 리스트 및 그리드 그리는 법 (1) | 2025.07.18 |
| [iOS] 인터페이스 빌더(Interface Builder) / @IBOutlet, @IBAction (1) | 2025.07.14 |
| [iOS] Xcode IDE (6) | 2025.07.11 |
| [iOS] Xcode 시뮬레이터(Simulator) 영상 화면 녹화 (3) | 2025.07.09 |