ViewPager에서 FragmentStatePagerAdapter와 FragmentPagerAdapter의 차이점은?
_____A: 두 어댑터는 ViewPager 내에서 여러 Fragment를 관리할 때 사용되지만, 메모리 관리 및 상태 저장 방식에서 차이가 있습니다.
---
1. FragmentPagerAdapter란?
- 역할 : ViewPager의 페이지를 Fragment로 구성할 때 사용하는 어댑터.
- 메모리 관리 : 각 페이지(Fragment)를 메모리에 계속 유지합니다.
- 동작 방식 : Fragment를 생성 후, detach 상태로 보관해서 다시 사용할 때 재활용합니다.
- 용도 : 페이지 수가 적고, 페이지 전환 시 Fragment를 빠르게 보여주는 데 적합합니다.
- 특징 :
- 프래그먼트가 삭제되지 않고 계속 메모리에 존재.
- 메모리 사용량이 많아질 수 있음.
- 페이지가 많지 않은 경우 추천.
---
2. FragmentStatePagerAdapter란?
- 역할 : 많은 수의 Fragment를 다룰 때 효율적인 관리가 가능한 어댑터.
- 메모리 관리 : 보이지 않는 Fragment의 상태를 저장하고, 실제 Fragment 인스턴스는 제거(파괴)합니다.
- 동작 방식 : Fragment의 상태(Bundle)를 저장한 후, 필요할 때 다시 생성합니다.
- 용도 : 페이지가 많은 경우 메모리 효율성을 위해 사용.
- 특징 :
- 메모리 사용량 줄임.
- 상태 저장 및 복원이 자동으로 이루어짐.
- 페이지가 많거나 동적으로 콘텐츠가 변경되는 경우에 적합.
---
3. 주요 차이점 요약
|---------------------------|---------------------------------------|-------------------------------------|
| 페이지 수 | 적은 수에 적합 | 많은 수에 적합 |
| Fragment 관리 | Fragment를 계속 메모리에 유지 | 상태 저장 후 Fragment 제거 |
| 메모리 사용 | 높음 | 낮음 |
| 상태 저장 방식 | 프래그먼트 인스턴스 유지 | onSaveInstanceState()를 통해 상태 저장 |
| 복원 시 복잡성 | 낮음 | 상태를 복원하여 Fragment 재생성 |
| 사용 시점 | 정적인 페이지의 고정된 Fragment 집합 | 동적인 페이지, 큰 데이터 세트 |
---
4. 언제 어떤 어댑터를 선택해야 하나요?
- FragmentPagerAdapter 선택 시점
- 페이지 수가 적고, 프래그먼트를 자주 교체하지 않는 경우
- 빠른 페이지 전환이 필요한 경우
- FragmentStatePagerAdapter 선택 시점
- 많은 페이지를 다뤄야 할 때
- 메모리 사용량 최적화가 필요할 때
- 페이지가 동적으로 추가/삭제되는 경우
---
5. 참고: AndroidX 및 ViewPager2
- AndroidX에서는 ViewPager2가 도입되었으며, FragmentStateAdapter가 기본 어댑터입니다.
- ViewPager2는 기존 ViewPager보다 개선된 성능과 기능을 제공합니다.
- 새로운 프로젝트에서는 ViewPager2 및 FragmentStateAdapter 사용 추천.
---
요약 :
`FragmentPagerAdapter`는 페이지가 적고 고정적인 경우에 적합하며, 프래그먼트를 메모리에 유지하여 빠른 재사용을 목표로 합니다.
`FragmentStatePagerAdapter`는 많은 페이지와 동적 컨텐츠에서 메모리 사용을 줄이고, 프래그먼트 상태를 저장 후 삭제하여 메모리 효율성을 높입니다.
아래에서 이 두 어댑터의 각 특징과 차이점을 설명하겠습니다.
1. FragmentPagerAdapter - 상태 유지 : `FragmentPagerAdapter`는 각 Fragment의 상태를 유지합니다.
즉, 사용자가 스와이프하여 다른 Fragment로 이동했을 때, 원래 Fragment의 상태가 보존됩니다.
- 메모리 사용 : 모든 Fragment가 메모리에 유지되므로, 대량의 Fragment를 사용할 경우 메모리 사용량이 많아질 수 있습니다.
- 적합한 경우 : 화면에 표시하는 Fragment 수가 적고, 이 Fragment들이 상태를 유지해야 하거나, 메모리가 충분할 때 사용합니다.
```java public class MyFragmentPagerAdapter extends FragmentPagerAdapter { // 생성자 및 메서드 구현 } ```
2. FragmentStatePagerAdapter - 상태 비유지 : `FragmentStatePagerAdapter`는 Fragment의 상태를 필요할 때만 저장하고, 다른 Fragment로 스와이프할 때 메모리에서 해제할 수 있습니다.
필요할 때 다시 생성됩니다.
- 메모리 사용 : 메모리 사용이 더 효율적입니다.
많은 Fragment를 사용하고, 그 중에서 일부 Fragment가 화면에 표시되지 않을 경우, 이 Fragment들이 메모리에서 제거됩니다.
- 적합한 경우 : 많은 Fragment를 사용하거나, 메모리를 절약해야 하는 경우에 적합합니다.
예를 들어, 대량의 데이터 페이지를 표시해야 하는 경우 유용합니다.
```java public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter { // 생성자 및 메서드 구현 } ``` 요약 - FragmentPagerAdapter 는 메모리 사용이 더 많지만 상태를 유지하며, 적은 수의 Fragment에 적합합니다.
- FragmentStatePagerAdapter 는 메모리 사용이 보다 효율적이며 상태를 필요에 따라 유지하므로, 많은 Fragment를 사용할 때 더 유용합니다.
일반적으로, Fragment 수가 적은 경우에는 `FragmentPagerAdapter`를 사용하고, Fragment 수가 많거나 각 Fragment의 상태가 중요하지 않은 경우에는 `FragmentStatePagerAdapter`를 사용하는 것이 좋습니다.
작성자:
정하윤 [비회원]
| 작성일자: 1년 전
2025-04-03 07:01:15
조회수: 113 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 113 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.