본문 바로가기
Programming/Android

[Android] 프레그먼트 Fragment 란?

by soccerman 2020. 10. 28.
반응형

Kotlin으로 안드로이드 앱개발하는 프로젝트를 하고 있다.
앱개발이 처음이라 공부하는겸 간단한 로그인 회원가입 화면을 만들기로 했다.
activity와 fragment 의 존재를 알게 되었고, fragment의 개념을 이해해 놓으면 추후 앱 개발을 할 때 도움이 될 것 같아서 조사를 조금 해봤다.


참고자료

google-developer-training.github.io/android-developer-advanced-course-concepts/unit-1-expand-the-user-experience/lesson-1-fragments/1-1-c-fragments/1-1-c-fragments.html

 

1.1: Fragments · GitBook

1.1: Fragments Contents: A Fragment is a self-contained component with its own user interface (UI) and lifecycle that can be reused in different parts of an app's UI. This chapter explains how a Fragment can be useful for a UI design. (A Fragment can also

google-developer-training.github.io


Fragment는 다음과 같은 성질을 가진다.

- User와 상호작용하는 코드를 포함한다.

- 자신의 생명주기를 가진다.

- Activity에 의해 host된다.


Fragment를 사용할 때 얻을 수 있는 이점

- 여러개의 Activity에서 코드중복없이 재사용 될 수 있다.

- Activity에 추가 제거가 용이하다.

- fragment UI가 Activity UI안에 결합되어서 Activity를 떠나지 않고 유저와 fragment UI를 통해 상호작용을 할 수 있다.

- 가로세로 전환등의 설정변경이 있어도인스턴스를 유지할 수 있다. fragment가 자신만의 생명주기를 갖기 때문에.

- 특정 세션의 레이아웃을 다양한 화면사이즈에서 잘 표현할 수 있다.


예시

프레그먼트 예시, 캘린더

 왼쪽의 그림과 같이 어떤 엑티비티(1) 위에 버튼이 있고 그 버튼을 눌렀을 때(2) 캘린더 프레그먼트가 화면에 활성화(3)된다고 하자. 해당 예시에서는 DialogFragment를 사용했다.

 

 캘린더를 통해 날짜 선택등의 유저의 input을 받는 등의 상호작용을 할 수 있고, 이는 자체 생명주기를 가진다. 프레그먼트 재사용이라고 하면, 다양한 액티비티에서 캘린더 기능을 넣고 싶을 때 캘린더 코드를 계속 반복해서 넣어주는 것이 아니라 캘린더 프레그먼트 호출을 해줌으로서 코드 중복을 예방하는 것을 의미하는 것 같다.


선호여부 조사 예시

위에서 Fragment 사용시 얻을 수 있는 이점 중에 Activity UI에 결합되어서 유저와 상호작용을 할 수 있다는 부분이 있었다. 이 예시에서 그것을 확인할 수 있다. OPEN 버튼 클릭시 상단에 선호도여부를 묻는 노란색 띠의 UI가 추가되고 유저로부터 input을 받을 수 있다.

***위의 Dialogfragment는 어떻게 구현할 지 대충 감이 잡혔는데, 이 예시는 Activity위에 fragment UI가 올라가는 것이 정확히 어떻게 구현하는지, 그냥 위에 올리면 되는지 잘 모르겠다. 한번 직접 해보면 알 수 있을 것 같다.


 왼쪽의 사진의 환경설정처럼 카테고리별로 세부사항을 조회하는 경우가 있다고 하자. 이때 fragment에서는 왼쪽 첫번째화면의 Settings 가 master이고 General 부분이 detail로 구분이 된다. 따라서 아이패드같이 큰 디스플레이에서 조회될 때 단순히 화면이 크게 보이는 것이 아니라, master부분은 왼쪽에 detail부분은 오른쪽에 배치된다. 패드 뿐만 아니라 갤럭시 폴드 등 화면 크기가 다양한 환경에서 안드로이드 앱이 사용된다. 이러한 현실상황을 고려했을 때 fragment를 잘 활용하는 것이 바람직하다고 여겨진다.


Fragment의 개념적인 측면을 살펴봤다.

다음 번에는 리소스적인 측면에서 한번 알아보겠다.

 

***

생명주기

반응형

댓글