2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

ViewPager에서 FragmentStatePagerAdapter와 FragmentPagerAdapter의 차이점은?

_____
Q: ViewPager에서 FragmentStatePagerAdapter와 FragmentPagerAdapter의 차이점은 무엇인가요?

A: 두 어댑터는 ViewPager 내에서 여러 Fragment를 관리할 때 사용되지만, 메모리 관리 및 상태 저장 방식에서 차이가 있습니다.

---

1. FragmentPagerAdapter란?

- 역할 : ViewPager의 페이지를 Fragment로 구성할 때 사용하는 어댑터.
- 메모리 관리 : 각 페이지(Fragment)를 메모리에 계속 유지합니다.
- 동작 방식 : Fragment를 생성 후, detach 상태로 보관해서 다시 사용할 때 재활용합니다.
- 용도 : 페이지 수가 적고, 페이지 전환 시 Fragment를 빠르게 보여주는 데 적합합니다.
- 특징 :
- 프래그먼트가 삭제되지 않고 계속 메모리에 존재.
- 메모리 사용량이 많아질 수 있음.
- 페이지가 많지 않은 경우 추천.

---

2. FragmentStatePagerAdapter란?

- 역할 : 많은 수의 Fragment를 다룰 때 효율적인 관리가 가능한 어댑터.
- 메모리 관리 : 보이지 않는 Fragment의 상태를 저장하고, 실제 Fragment 인스턴스는 제거(파괴)합니다.
- 동작 방식 : Fragment의 상태(Bundle)를 저장한 후, 필요할 때 다시 생성합니다.
- 용도 : 페이지가 많은 경우 메모리 효율성을 위해 사용.
- 특징 :
- 메모리 사용량 줄임.
- 상태 저장 및 복원이 자동으로 이루어짐.
- 페이지가 많거나 동적으로 콘텐츠가 변경되는 경우에 적합.

---

3. 주요 차이점 요약
| 구분 | FragmentPagerAdapter | FragmentStatePagerAdapter |
|---------------------------|---------------------------------------|-------------------------------------|
| 페이지 수 | 적은 수에 적합 | 많은 수에 적합 |
| Fragment 관리 | Fragment를 계속 메모리에 유지 | 상태 저장 후 Fragment 제거 |
| 메모리 사용 | 높음 | 낮음 |
| 상태 저장 방식 | 프래그먼트 인스턴스 유지 | onSaveInstanceState()를 통해 상태 저장 |
| 복원 시 복잡성 | 낮음 | 상태를 복원하여 Fragment 재생성 |
| 사용 시점 | 정적인 페이지의 고정된 Fragment 집합 | 동적인 페이지, 큰 데이터 세트 |

---

4. 언제 어떤 어댑터를 선택해야 하나요?

- FragmentPagerAdapter 선택 시점
- 페이지 수가 적고, 프래그먼트를 자주 교체하지 않는 경우
- 빠른 페이지 전환이 필요한 경우

- FragmentStatePagerAdapter 선택 시점
- 많은 페이지를 다뤄야 할 때
- 메모리 사용량 최적화가 필요할 때
- 페이지가 동적으로 추가/삭제되는 경우

---

5. 참고: AndroidX 및 ViewPager2

- AndroidX에서는 ViewPager2가 도입되었으며, FragmentStateAdapter가 기본 어댑터입니다.
- ViewPager2는 기존 ViewPager보다 개선된 성능과 기능을 제공합니다.
- 새로운 프로젝트에서는 ViewPager2 및 FragmentStateAdapter 사용 추천.

---

요약 :
`FragmentPagerAdapter`는 페이지가 적고 고정적인 경우에 적합하며, 프래그먼트를 메모리에 유지하여 빠른 재사용을 목표로 합니다.
`FragmentStatePagerAdapter`는 많은 페이지와 동적 컨텐츠에서 메모리 사용을 줄이고, 프래그먼트 상태를 저장 후 삭제하여 메모리 효율성을 높입니다.
`ViewPager`에서 `FragmentStatePagerAdapter`와 `FragmentPagerAdapter`는 두 가지 주요 어댑터 클래스이며, 그 용도와 동작 방식에서 몇 가지 중요한 차이점이 있습니다.

아래에서 이 두 어댑터의 각 특징과 차이점을 설명하겠습니다.

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
내용이 부정확하다면 싫어요를 클릭해주세요.