Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ImageView
- 클래스다이어그램
- DistributedSystems
- scaletype
- ClientServerArchitecture
- stateflow
- SoftwareArchitecture
- 행위패턴
- decoding
- Kotlin
- RxJava
- 구조패턴
- SharedFlow
- SDLC
- 이미지찌그러짐
- SystemDesign
- ArchitecturePatterns
- LazyInitialization
- 유스케이스다이어그램
- NetworkCommunication
- 옵서버
- android
- 전역상태관리
- 시퀀스다이어그램
- 싱글톤패턴
- threadsafety
- LayeredArchitecture
- MVVM
- 아키텍쳐패턴
- 이미지짤림
Archives
- Today
- Total
Kyung_Development
Android에서 DialogFragment를 사용하는 이유와 방법 본문
안드로이드에서 다이얼로그를 띄우는 방법은 여러 가지가 있지만, DialogFragment는 가장 유연하고 강력한 옵션 중 하나입니다. 이번 포스팅에서는 Fragment, DialogFragment, BottomSheetDialogFragment의 차이점과 DialogFragment를 사용하는 이유를 정리해보겠습니다.
1. Fragment, DialogFragment, BottomSheetDialogFragment의 차이점
1) Fragment
- 역할: 액티비티 내에서 UI를 재사용할 수 있도록 돕는 독립적인 UI 컴포넌트
- 특징:
- 여러 개의 프래그먼트를 하나의 액티비티에서 활용 가능
- ViewPager 또는 Navigation Component에서 활용됨
- Activity의 생명주기에 종속됨
- 사용 예시:
class MyFragment : Fragment(R.layout.fragment_my) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // UI 설정 및 이벤트 처리 } }
2) DialogFragment
- 역할: 팝업 형태의 다이얼로그를 생성하는 Fragment
- 특징:
- 일반적인 AlertDialog보다 유연한 UI 구성이 가능
- 회전 시에도 다이얼로그 유지
- show() 메서드를 통해 다이얼로그 표시
- 사용 예시:
class MyDialogFragment : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return AlertDialog.Builder(requireContext()) .setTitle("Title") .setMessage("This is a dialog fragment.") .setPositiveButton("OK") { _, _ -> } .create() } } // 다이얼로그 띄우기 val dialog = MyDialogFragment() dialog.show(supportFragmentManager, "MyDialog")
3) BottomSheetDialogFragment
- 역할: 화면 하단에서 올라오는 BottomSheet 형태의 DialogFragment
- 특징:
- 머티리얼 디자인 기반의 Bottom Sheet 스타일 적용
- 사용자가 위로 스와이프하여 닫을 수 있음
- BottomSheetDialogFragment를 상속하여 구현
- 사용 예시:
class MyBottomSheetFragment : BottomSheetDialogFragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return inflater.inflate(R.layout.fragment_bottom_sheet, container, false) } } // 바텀시트 띄우기 val bottomSheet = MyBottomSheetFragment() bottomSheet.show(supportFragmentManager, "MyBottomSheet")
2. 왜 Dialog 대신 DialogFragment를 사용할까?
1) 화면 회전 시 자동 복원
기본 Dialog는 화면이 회전하면 사라지지만, DialogFragment는 FragmentManager를 통해 자동으로 복원됩니다.
val dialog = MyDialogFragment()
dialog.show(supportFragmentManager, "MyDialog")
- 화면이 회전해도 MyDialogFragment가 유지됨.
2) 액티비티 생명주기와 동기화
- DialogFragment는 Activity와 같은 생명주기를 따르므로 메모리 누수를 방지할 수 있음.
- onPause() 시 자동으로 닫히고, onResume() 시 복원됨.
3) 백 스택 관리 가능
- DialogFragment는 FragmentTransaction을 사용하여 백 스택에 추가할 수 있음.
- 뒤로 가기 버튼을 눌렀을 때 다이얼로그를 닫을 수 있음.
val dialog = MyDialogFragment()
dialog.show(supportFragmentManager, "MyDialog")
4) 커스텀 UI 구성 용이
- DialogFragment는 XML 레이아웃을 활용하여 복잡한 UI를 구성할 수 있음.
class MyDialogFragment : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return inflater.inflate(R.layout.fragment_dialog, container, false)
}
}
3. Dialog vs. DialogFragment 비교
구분 Dialog DialogFragment
라이프사이클 | 액티비티의 라이프사이클을 직접 관리해야 함 | FragmentManager를 통해 자동 관리 |
회전 처리 | 화면 회전 시 Dialog가 사라짐 (수동으로 관리 필요) | 회전해도 자동으로 상태 복원됨 |
백 스택 관리 | 직접 구현해야 함 | FragmentTransaction을 사용하여 자동으로 처리됨 |
UI 확장성 | AlertDialog 커스텀 뷰 사용 가능하지만 제한적 | XML 레이아웃을 활용해 자유롭게 UI 구성 가능 |
재사용성 | 독립적으로 재사용 어려움 | 여러 액티비티에서 사용 가능 |
4. DialogFragment를 사용해야 하는 경우
✅ 사용 추천
- 화면 회전 시 다이얼로그가 유지되어야 할 때
- FragmentManager를 활용한 다이얼로그 관리가 필요할 때
- 백 스택에 추가하고 싶은 경우
- 복잡한 커스텀 UI를 사용하고 싶을 때
❌ 일반 Dialog를 써도 되는 경우
- 간단한 AlertDialog(예: 확인, 취소 버튼만 있는 다이얼로그)
- 화면 회전이 고려되지 않는 경우
결론
✅ 복잡한 다이얼로그 UI + 액티비티 생명주기와 동기화 → DialogFragment
✅ 간단한 메시지 팝업만 필요 → Dialog
DialogFragment는 유지보수성과 확장성이 뛰어나므로, 다이얼로그를 사용할 때 고려해보는 것이 좋습니다! 😊
'android' 카테고리의 다른 글
소프트웨어 개발 구성 요소 및 개념들 쉽게 이해하기 (0) | 2025.02.13 |
---|---|
Firebase Event (0) | 2025.01.17 |