Activity와 Fragment는 안드로이드에서 View를 보여주기 위한 Container 역할을 하는 두 개의 클래스이다.
Activity
액티비티는 사용자가 애플리케이션과 상호작용하는 부분이며, UI를 그리는 컨테이너 역할을 제공한다.
대부분의 앱은 여러 액티비티로 구성되지만 일반적으로 앱의 활동 간에는 최소한의 종속성만 존재한다.
• 일반적으로 한 액티비티는 하나의 화면을 구현함
• 액티비티는 화면을 가득 채우지만 화면보다 작거나 다른 창 위에 떠 있을 수도 있음
• 액티비티는 다중 화면 UI를 만들 수 없기 때문에 다중 화면 UI를 만들기 위해서는 프래그먼트를 사용해야 함
Fragment
프래그먼트는 다양한 화면 구성을 위한 앱 UI 재사용을 위해 설계되었다. 여러 개의 프래그먼트를 하나의 액티비티에 결합하여 컨테이너(=레이아웃)가 여러 개인 UI를 빌드 할 수 있다.
다양한 화면 비율을 갖고 있는 안드로이드 생태계에서 Activity 안에 화면 UI를 Fragment로 나누면 런타임 시 액티비티 화면을 동적으로 추가, 교체, 삭제할 수 있다. 또한, 백 스택에 보관할 수 있기 때문에 변경사항을 취소하는 것도 가능하다. (추가설명 필요)
• 하나의 프래그먼트를 여러 액티비티에서 재사용할 수 있음
• 프래그먼트는 독립적으로 존재할 수 없으며, 반드시 Activity나 다른 Fragment에 정의되어야 함 (그런 의미에서 액티비티가 더 큰 집합이라고 할 수 있음)
• 프래그먼트는 액티비티에 종속되어 있으면서 자체적으로 수명 주기를 갖고 있음
• 프래그먼트를 사용하면 프로젝트 구조가 좋고, 구조를 쉽게 처리할 수 있음
Activity와 Fragment의 차이점
• 액티비티는 독립적으로 활용할 수 있지만 프래그먼트는 액티비티나 다른 프래그먼트에 종속되어 있어야 한다.
• 모든 액티비티는 manifest.xml 파일에 작성되어야 하지만 프래그먼트는 작성될 필요가 없다.
• 액티비티는 자체적인 생명주기가 존재하며, 프래그먼트는 액티비티와 별개로 자체적인 생명주기를 가지고 있지만 액티비티의 생명주기와 유기적으로 연관되어 있다.
• 액티비티는 정지되면 자동적으로 시스템에서 관리하는 백 스택에 넣어지며, 프래그먼트는 트랜잭션에서 addToBackStack() 호출을 통해 인스턴스를 저장하라고 명시적으로 요청할 경우에만 액티비티에서 관리하는 백 스택으로 들어간다.