본문 바로가기
스마트 장치 개발

MAUI TabbedPage와 Shell 사용 비교

by leo21c 2025. 10. 16.

특별한 이유가 없다면 최신 .NET MAUI 앱에서는 Shell을 사용하는 것이 더 좋은 선택이며 최신 트렌드에 부합합니다.

이전 대화에서 겪으셨던 DI(의존성 주입) 문제도 Shell을 사용하면 훨씬 간단하게 해결됩니다. 왜 Shell이 더 권장되는지, 두 방식의 차이점은 무엇인지 자세히 설명해 드릴게요.

Shell vs. TabbedPage 비교

특징 Shell TabbedPage
구조 앱 전체의 상위 구조(Flyout, 탭, 내비게이션)를 한번에 정의. "All-in-one" 단순히 여러 페이지를 탭으로 묶어주는 컨테이너 역할
내비게이션 URI 기반 (//main/status)으로 동작하여 유연하고 강력함. ViewModel에서도 쉽게 페이지 이동 가능. 객체 인스턴스 기반 (Navigation.PushAsync(new MyPage()))으로 동작.
DI
(의존성 주입)
페이지 이동 시 DI 컨테이너가 자동으로 페이지와 ViewModel을 생성/주입. DI 친화적. XAML에 선언 시 DI가 복잡해짐 (겪으셨던 문제). 코드 비하인드에서 수동으로 자식 페이지를 추가해야 함.
주요 기능 - 하단 탭 (Bottom Tabs)- 상단 탭 (Top Tabs)- 플라이아웃 메뉴 (햄버거 메뉴)- URI 기반 라우팅 및 데이터 전달- 검색 핸들러 - 하단 또는 상단 탭 기능만 제공
추천 사용 사례 대부분의 현대적인 모바일 앱. 복잡한 내비게이션 구조를 가진 앱. 매우 단순하고 고정된 몇 개의 탭만 필요한 간단한 앱.
최신 트렌드 .NET MAUI의 표준이자 권장 방식. Microsoft 공식 템플릿도 Shell을 기본으로 사용. 전통적인 방식. 여전히 유효하지만 새로운 앱에서는 Shell에 밀리는 추세.

왜 Shell이 더 나은 선택일까요?

  1. 단순하고 일관된 구조AppShell.xaml 파일 하나에 앱의 전체적인 내비게이션 구조(어떤 탭이 있고, 어떤 플라이아웃 메뉴가 있는지)를 선언적으로 정의할 수 있어 관리가 편합니다.
  2. 강력한 내비게이션: Shell.Current.GoToAsync("///LoginPage")처럼 문자열 기반의 URI로 어디서든 쉽게 페이지를 이동할 수 있습니다. 이는 MVVM 패턴에서 ViewModel이 View에 대한 직접적인 참조 없이도 내비게이션을 제어할 수 있게 해주는 핵심 기능입니다.
  3. DI 문제 해결: Shell은 페이지로 이동할 때마다 DI 컨테이너를 통해 페이지를 요청합니다. 
LIST