화면을 정의하는데 activity만 사용해도 되는거 아닌가요? 그런생각을 매번 했습니다. 그리고 제가 개인적으로 생성한 앱에서도 activity 를 여러개 사용하고 있어서 fragment로만 사용해도 성능상 좋은건지? 어떤 경우에 fragment가 필수로 사용되어야 하는지에 대해서도 알아보겠습니다.
fragment의 특성으로는 activity나 다른 fragment에서 호출되어서 사용 가능 하다는 것입니다. 프래그먼트는 자체 lifecycle을 가지면서 자체적으로 레이아웃을 관리할 수 있는 권한을 가지고 있습니다.
가장 큰 장점은 다음과 같습니다
UX의 유동적인 부분이 존재하는 위 그림의 tablet에서는 wide-screen으로 navigation이 펼쳐진 형태로 존재하고 있으며 navigation 이 선택되면 동적으로 detail 항목이 변경되어야 하는 경우
Application에서 이러한 performance를 보여주기 위해서는 fragment가 가지는 모듈성을 가질 필요가 있습니다. fragment는 device가 가지는 특성을 보고 replacement할 수 있습니다. 이것이 바로 activity가 가지지 못하는 모듈성이 있다고 말합니다.
이 모듈성 때문에 한 화면에서도 같은 fragment을 여러개 호출해서 사용할 수도 있습니다. 그렇기 때문에 fragment는 재사용성의 측면에서도 activity에 비교할수없습니다
fragment는 activity에 종속적인 lifecycle을 가집니다. fragment lifecycle을 검색하게 될때 필수적으로 actvity lifecycle과 비교하는 것도 그것때문입니다. 수명주기만 해도 내용이 한바가지라서 다음에 정리해야겠습니다
사실 개인적으로는 이 종속적인 면이 있기 때문에 단점도 존재 한다고 생각합니다. transaction의 시점의 데이터를 언제까지 들고 있을수 있는 가에 대한 문제와 actvity가 메인 스레드를 작업하다가 깨지면 transaction에 대한 문제도 클것같고요. 개인적으로는 fragment의 lifecycle을 잘 관리할 수 있다면 정말 좋을 것 같습니다.
activity 의 intent 와 같은 데이터 를 공유 할때 보다 fragment 간의 통신의 경우가 훨씬 경량화 되어 있기도 하고,
fragment backstack 의 경우에도 activity stack 보다 훨씬 메모리 관리가 편해서 사용자 퍼포먼스에는 상당히 좋다고 합니다
이 부분은 저도 다음에 후속으로 포스팅 할 예정입니다