
Activity는 앱의 하나의 화면 전체를 담당하는 컴포넌트이다. 앱의 기본 실행 단위여서 앱이 실행되고 종료될 때 함께 관리된다.
액티비티는 독립적인 컨트롤이 가능하다는 장점이 있다. (독립적이고 OS에 의해 직접 제어됨)
보통은 하나의 Activity는 하나의 화면을 가진다. Activity 전환은 명시적인 Intent 기반이라 비용이 크다. 예를 들면 로그인 화면, 설정 화면, 프로필 화면 등 각 화면을 의미한다.
Fragment는 Activity 안에서 재사용 가능한 UI 조각이다. Fragment의 생명주기는 Activity에 종속된다. 즉, Activity와 함께 생성/소멸된다. 같은 Activity 내에서 화면 일부를 바꾸거나 나눌 때 사용된다. 여러 Fragment를 조합해 화면을 동적으로 구성할 수 있다.
Fragment의 예시는 탭 뷰, 상세 화면, 다이얼로그 UI 조각 등이 있다.
요약하면 Activity는 전체 화면 단위, Fragment는 Activity 안의 부분 화면 단위이다, Fragment는 재사용성과 유연한 화면 구성이 장점이다.
1. 동적인 UI 구성 필요 시
화면 일부만 바꾸거나 동일 Activity에서 좌우 스와이프로 여러 화면 보여줄 때 (ViewPager) Fragment를 사용한다.
2. UI 재사용 필요할 때
같은 Fragment를 여러 Activity나 컨텍스트에서 재사용 가능하기 때문에 여러 화면에서 쓰이는 조각들은 Fragment로 만드는 겢 ㅗㅎ다.
3.Back Stack을 직접 제어하고 싶을 때
FragmentManager로 Fragment 전환 히스토리를 유연하게 관리할 수 있다.
Activity는 앱의 큰 화면 전환 단위, Fragment는 유연한 화면 조합과 재사용을 위한 단위.
복잡한 앱일수록 Fragment + ViewModel 조합으로 구조화된 설계를 하게 된다.
Q. 개발 시 Activity와 Fragment를 어떻게 사용하였는가?
A. 앱의 화면 구성 설계 시 전환이 적고 화면 간 기능이 명확하게 분리되는 경우는 Activity 중심으로 설계하였다. 반면, 재사용성 높은 UI 조각이 많거나 일 Activity 내에서 화면을 동적으로 바꿔야 하는 경우에는 Fragment를 사용했다. 특히 ViewModel + Fragment 조합으로 화면 간 데이터 공유와 Lifecycle 관리가 용이해서 구조적인 앱 설계에 적합하다고 판단했다.
Q. Activity만 사용해도 앱이 동작가능한데 Fragment를 쓰는 이유는?
A. 앱의 구조가 단순하고 화면 전환이 많지 않다면 Activity만으로도 충분하다. 하지만 앱이 복잡해지고 UI의 재사용성이나 유연한 구성 방식이 필요해질수록 Fragment의 장점이 분명히 드러난다. 예를 들어, ViewPager나 BottomNavigation처럼 하나의 Activity에서 여러 화면을 전환하거나 유지해야 하는 경우, Fragment를 사용하면 메모리 관리, Back Stack 제어, 그리고 상태 저장이 훨씬 유리하다. 또한 Fragment는 여러 Activity에서 재사용 가능하므로 모듈화된 UI 설계에도 적합하다.
Q. Fragment 전환 시 상태 보존은 어떻게 처리하는 게 좋을까?
A. Fragment 전환 시에는 상태 손실을 막기 위해 ViewModel을 통해 데이터를 관리하는 것이 가장 효과적. ViewModel은 Fragment보다 긴 생명주기를 가지므로, 화면 회전이나 전환이 발생해도 데이터를 유지할 수 있다. 또한 필요에 따라 SavedStateHandle이나 onSaveInstanceState()를 통해 일시적인 데이터를 저장하고 복원할 수도 있다.
Q. Fragment와 ViewModel을 함께 쓰는 이점은?
A. Fragment는 Activity보다 짧은 생명주기를 가지기 때문에, 데이터가 화면 회전이나 전환 시 사라질 위험이 있다. ViewModel을 사용하면 이 문제를 해결할 수 있다. ViewModel은 Activity 또는 Fragment의 Lifecycle을 관찰하지만, UI 컴포넌트보다 오래 유지되기 때문에 상태 보존에 효과적이다. 특히 여러 Fragment가 하나의 ViewModel을 공유하면, Fragment 간 상태 전달이나 UI 동기화가 훨씬 쉬워진다. 예를 들어, 리스트를 보여주는 Fragment와 상세보기를 담당하는 Fragment가 있을 때, 하나의 ViewModel을 공유하게 하면 선택 상태, 필터 상태 등을 일관되게 유지할 수 있다.