Activity는 안드로이드 애플리케이션의 화면 하나를 나타내는 구성요소로 사용자는 Activity가 생성한 UI를 통해 애플리케이션과 상호작용을 할 수 있다. 또한 각 Activity는 독립적이기 때문에 앱이 사용자와 상호작용하기 위한 진입점 역할을 하기도 한다.
Activity는 하나 이상의 View나 View Group을 가지고 있어야 하며 이를 통해 UI를 표현하게 된다.

Fragment는 Activity를 사용해 화면을 구성하면서 생기는 문제점들을 보완하기위해 탄생한 클래스다.
Activity를 사용해 화면을 구성하는 경우 크게 2가지의 문제점이 나타났는데 살펴보면 다음과 같다.
- 한개의
Activity가 하나의 화면을 나타내다보니 똑같은 UI를 가지고 있지만 콘텐츠가 다른 경우 해당 화면을 위해 비슷한 코드의 새로운Activity를 생성해야했다.
- 디바이스가 다양해짐에 따라 화면의 크기가 천차만별로 달라졌고 특히 태블릿 PC의 경우 스마트폰의 화면에 비해 상당히 큰 화면을 가지고 있기떄문에 최적화를 위해 화면에 한개 이상의 UI를 그려야하는 경우가 필요하기도 했다. 하지만
Activity는 ‘하나의 화면’만 나타내는게 가능했기때문에 이러한 부분에서 큰 어려움을 가지고 있었다.

Fragment는 UI를 모듈형식으로 나누어 관리할 수 있도록 해주는 클래스로, 화면의 일부분만 차지하기 때문에 하나의 Activity에 여러개의 Fragment를 사용하는게 가능하다는 특징이 있다.
(전체를 덮는다고해도 전체 ‘면적’만 차지하는것일뿐 화면 자체를 차지하는게 아니다.)
쉽게 이야기하자면 Activity에 View나 View Group과 같이 Fragment를 생성해 화면을 그릴수 있으며, 다시 Fragment내부에 View나 View Group을 사용해 화면을 그릴 수 있다는 말이다.

또한 컴포넌트 클래스가 아니기 때문에 각각의 클래스가 독립성을 지니지 않아 UI가 똑같은 화면의 경우 Fragment를 재사용해 불필요한 Activity를 생성할 필요없이 화면 구성이 가능하게 해준다.
하지만 Fragment는 Activity에 종속된 클래스이기 때문에 반드시 Activity내에서만 사용이 가능하며, 생명주기 또한 Activity에 종속되어 있기 때문에 단독으로 사용하는건 절대 불가능하다.
한마디로 Activity라는 화면이 있어야 Fragment라는 UI의 조각을 붙일 수 있다고 생각하면 된다.
안드로이드 앱 컴포넌트에 대해 알아보며 시스템에서 클래스 객체의 생명주기를 관리하는 것을 컴포넌트 클래스라고 부른다고 했었는데, Fragment는 개발자가 생명주기를 관리하지 않는다.
(개발자가 코드로 직접 Fragment의 추가나 제거, 교체같은 작업을 요청하더라도 시스템에 요청을 통해 진행되기때문에 개발자가 직접 Fragment 객체의 생명주기에 관여하지 않는다.)
즉, 시스템이 Fragment 객체의 생명주기를 관리한다. 그렇다면 Fragment는 컴포넌트 클래스일까? 정답은 아니다.
앞서 말했듯 Fragment는 해당 Fragment를 선언한 Activity에 종속되어 있기 때문에 생명주기는 항상 Activity를 통해 간접적으로 관리된다.
따라서 Fragment는 독립적으로 존재할 수 없으며, 그렇기 때문에 앱의 진입점이 될 수도 없다. 앱의 구성요소인 컴포넌트의 조건을 충족할 수 없기 때문에 컴포넌트 클래스라고 할 수 없는것이다.
(애초에 컴포넌트에 종속된 하위 구성요소이기 때문에 컴포넌트자체가 될 수 없다.)
Activity는 안드로이드 앱의 화면을 구성하는 구성요소이고, Fragment는 Activity에 종속된 화면의 전체 혹은 일부를 표시하는 구성요소라고 할 수있다.