저번 포스팅에서는 Activity의 생명주기에 대해 작성을 했엇습니다.
이번에 프로젝트를 진행하면서 이슈가 있어 작업하던 도중 Fragment 생명주기를 생각하지 못해 고생을 한 기념으로 Fragment 생명주기에 대해 작성해 보겠습니다.
먼저 Fragment의 생명주기에 대해 알아보기 전에 Fragment란 무엇인지에 대해 먼저 간단하게 알아보겠습니다.
어떤 동작 또는 사용자 인터페이스의 일부를 나타내는 독립적인 모듈입니다.
독립적인 모듈이지만 프래그먼트만으로는 화면을 만들 수 없으며 반드시 액티비티에 종속되어 있어야 하는 특징이 있습니다.
1. 재사용성 증가 : 뷰 또는 비즈니스 로직을 프래그먼트 단위로 분리할 수 있습니다. 아키텍처 원칙에서 가장 중요한 원칙인 관심사 분리를 통해 의존성을 분리하고 독립성을 키울 수 있습니다.
2. 퍼포먼스 : 액티비티는 프래그먼트에 비해 상대적으로 무겁습니다. 액티비티 안에 호스팅 되어 있는 프래그먼트는 상대적으로 가볍게 추가, 삭제가 가능합니다.
액티비티에 종속되어 있는 특징 때문에 액티비티와 비슷한 라이프 사이클을 가지고 있습니다.

Android developers 문서에 있는 사진입니다.
Activity LifeCycle과 다르게 Fragment의 생명주기가 더 복잡하고 많아보이는대 Fragment는 Activity에 종속적이기 때문에 Activity의 생명주기를 포함해 가지고 있기 때문입니다.
프래그먼트의 라이프 사이클에 대해 순서대로 설명 해보겠습니다.
onAttach() : Fragment가 Activity에 붙을 때 호출, 프래그먼트와 액티비티 간의 상호 작용을 설정하는 데 사용됩니다.
onCraete() : 프래그먼트가 생성될 때 호출됩니다. 프래그먼트의 초기 설정을 수행하는 데 사용됩니다.
onCreateView() : 프래그먼트의 UI를 그리고 인플레이트 하는데 사용됩니다. 프래그먼트의 레이아웃 및 뷰 계층 구조를 생성하고 초기화하는 작업이 이루어집니다.
onViewCreate() : 뷰에 대한 추가적인 설정이나 이벤트 처리 등을 수행합니다.
onStart() : 프래그먼트가 사용자에게 보여지기 직전에 호출됩니다. 프래그먼트가 액티비티위에 올라와 화면에 보이기 시작합니다.
onResume() : 프래그먼트가 사용자와 상호작용하기 직전에 호출됩니다. 사용자 입력 및 이벤트 처리를 시작합니다.
onPause() : 다른 액티비티나 프래그먼트가 포커스를 가질 때 호출됩니다. 현재 프래그먼트가 화면에서 벗어나면서 일시적으로 멈추는 상태로 전환됩니다.
onStop() : 프래그먼트가 더이상 화면에 보이지 않을 때 호출됩니다. 프래그먼트가 완전히 중지되고 사용자와의 상호작용이 없는 상태입니다.
onDestroyView() : 프래그먼트의 뷰가 소멸되는 단계입니다. 뷰와 관련된 리소스를 해제하는 등의 작업을 수행합니다.
onDestroyView() : 프래그먼트가 파괴될 때 호출됩니다. 프래그먼트와 관련된 리소스를 해제하고 정리하는 작업을 수행합니다.
상황에 따른 콜백 함수 호출

onAttach() -> onCreate() -> onCreateView() -> onViewCreated() -> onStart() -> onResume() 순으로 호출됩니다.

onPause() -> onStop() -> onDestroyView() 순으로 호출됩니다.
주의할 점은 A -> B로 이동했을 때 B의 로그가 아닌 A의 로그인 점을 헷갈리면 안됩니다.

onCreateView() -> onViewCreated() -> onStart() -> onResume() 순으로 실행

onPause() -> onStop() -> onDestroyView() -> onDetach() 순으로 실행
참고 : https://latte-is-horse.tistory.com/275, https://developer.android.com/guide/components/fragments?hl=ko