학습 목표
- Scaffold를 이해하고 사용할 수 있다
- 앱바(App Bar)를 이해하고 사용할 수 있다
- 메뉴(DropdownMenu)를 이해하고 사용할 수 있다
- 다이얼로그(AlertDialog BottomSheet)를 구현할 수 있다
- 네비게이션(NavigationBar, NavigationDrawer, NavHost)을 이해·구현할 수 있다
- 스낵바(Snackbar)를 이해하고 사용할 수 있다.
- 코틀린 코루틴을 이해하고 설명할 수 있다.
Scaffold
- Material Design에서 복잡한 사용자 인터페이스를 위한 기본 구조
- App Bar, Floating Action Button등을 포함하고 일관된 디자인 제공

앱바(App Bar)
- 사용자에게 현재 화면에 필요한 액션과 네비게이션 액션을 제공하는 컨테이너
- 앱의 상단 또는 하단에 표시됨
- TopAppBar
- BottomAppBar
-
사용자가 아이콘, 텍스트 필드 또는 기타 컴포넌트를 클릭한 다음
일시적으로 나타나는 드롭다운 메뉴(옵션 목록)에서 옵션을 선택할 수 있음
-
DropdownMenu, DropdownMenuItem을 이용하여 구현
-
DropdownMenu
-
-
- onDismissRequest: 메뉴가 닫힐 때 호출
-
- content: 드롭다운 메뉴 옵션, DropdownMenuItem 컴포저블 사용
-
DropdownMenuItem
-
-
다이얼로그(AlertDialog)
- 앱 콘텐츠 위에 대화상자로 메시지를 표시하거나 입력 받기 위한 UI
- 파일 삭제와 같은 작업 진행 전에 사용자에게 확인 요청
- 일정 관리에서 일정 추가할 때 사용자 입력을 받아야 하는 경우

Bottom Sheet Dialog

NavigationBar
-
보통 BottomBar에 같은 수준의 3-5개 대상 화면에 대해 화면 전환할 때 사용
-
NavigationBar로 대상 선택 메뉴 구성
-
-
NavHost로 실제 보여질 화면을 구성
-
NavigationBar와 NavHost의 연결은
navigation controller를 통해서

NavHost와 navigation controller를 사용하지 않아도 됨
NavigationDrawer
- 앱의 여러 화면으로 전환하는 대상을 선택할 수 있는 서랍
- ModalNavigationDrawer, ModalDrawerSheet를 이용하여 탐색 서랍을 구성
- NavigationDrawerItem으로 대상 하나를 정의

Snackbar

코틀린 코루틴(Coroutines)

코루틴 3대 요소
코루틴 스코프(CoroutineScope)
- 코루틴이 수행되는 범위, 코루틴은 반드시 코루틴 스코프 내에서 실행
예)
viewModelScope: 뷰모델 생명주기에 맞춰 종료
lifecycleScope: 액티비티/프래그먼트 생명주기에 맞춰 종료
디스패쳐(Dispatcher) = 스레드
- 어떤 스레드에서 실행?
- Dispatcher.Main: UI 업데이트용 (메인 스레드)
- Dispatcher.IO: 네트워크 디스크 읽기/쓰기 등 무거운 작업용
- Dispatcher.Default: CPU 집약적인 계산 작업용
Coroutine Context
- 어떤 정보를 담고 있는가?
- 코루틴의 이름, Dispatcher, Job 등을 담고 있는 컨텍스트