안드로이드/이론관련

액티비티(Activity)와 프래그먼트(Fragment)

닉네임못짓는사람 2023. 2. 27. 20:05
반응형

이번 글에서는 Activity와 Fragment에 대해서 알아보자.

 

Activity


Activity는 Android의 4대 Component중 하나로 사용자에게 실제로 보이며, 사용자와 상호작용하는 화면을 말한다.

Activity는 하나 이상의 View또는 ViewGroup을 반드시 가지고 있어야 하며, 한 번에 하나의 Activity만 Disaplay할 수 있다.

 

비유를 해보자면, 종이를 끼우는 파일철을 생각해보도록 하자.

파일철에는 여러 장의 종이를 끼워서 보관할 수 있는데, 우리는 한 번에 한 종이의 한 면만 확인할 수 있다.

여기서 이 한 면이 Activity가 되는것이고, 한 면 위에 쓰인 내용들을 View또는 ViewGroup이라고 할 수 있다.

Fragment


자 그럼 Fragment는 무엇일까?

Fragment는 간단하게 말하면 Activity+View라고 할 수 있다.

View의 개념을 가지고 Activity위에 배치되지만, Activity의 개념을 가지고 그 위에 다른 VIew들을 배치할 수 있는 것이다.

 

여기서 "그냥 Activity위에 모든 View들을 배치하면 되는데, 굳이 Fragment를 왜 사용해야 하느냐?"라는

의문이 생길 수 있는데, 이를 설명하기 위해 먼저 Fragment의 탄생 배경에 대해서 알아보자.

 

일단 Fragment의 탄생 배경은 Tablet의 등장과 관련이 있다.

Tablet은 기존의 스마트폰에 비해 비교적 큰 화면을 가지고 있기 때문에 한 화면에 더 많은 View들을 배치해도

사용자들이 불편함 없이 각 View들을 인지하고, 상호작용을 할 수 있다.

 

그런데 이때 큰 화면에 들어가는 많은 View들을 단일 Activity에서 관리하기가 부담스럽기 때문에

Fragment를 만들고, 이 Fragment에 View들을 나눠서 배치함으로써 이러한 부담을 덜어낸 것이라고 할 수 있다.

 

결국 Fragment를 사용하는 이유는 더욱 유연한 UI디자인을 제공하는 것이 목적이다.

여러분이 사용하는 많은 App에서 아래와 같은 구조를 가진 Activity를 본 적이 많을 것이다.

 

이는 NavigationDrawer라고 하는데, Activity를 슬라이드 하면 Fragment를 화면에 보여주는 구조이다.

이러한 구조는 사용자에게도 매우 바람직한 구조인데, 기본적으로 Activity는 Fragment보다 상대적으로 '무겁다'

 

때문에 위와 같이 NavigationDrawer방식을 사용하지 않고 위 Fragment를 별도의 Activity로 구성할 경우

새로운 Activity를 생성하는 과정도 상대적으로 느리며, 만약 기존 Activity를 Destroy하지 않을 경우

이를 Stack에 쌓아두는 것 또한 메모리 측면에서는 부담스러울 것이다.

 

또한 개발자 측면에서도 Fragment사용 시 View들을 Fragment단위로 분리할 수 있기 때문에

재사용성이 증가하고, 관리도 용이할 것이다.

 

이렇게 보면 Fragment는 장점만 있는 것처럼 보일 수도 있지만, 아래와 같은 단점도 있다.

 

1. FragmentManager Transaction

비동기로 인해 예기치 않은 동작이 발생할 수 있다.

2. Think About Lifecycle

Fragment도 Activity와 마찬가지로 생명 주기를 가진다.

때문에 Fragment사용 시 Activity생명 주기와 더불어 Fragment생명 주기도 고려하여야 한다.

차이점


위 내용들을 토대로 Activity와 Fragment의 몇 가지 차이점을 확인해보자.

1. Activity는 독립적으로 활용할 수 있다.

2. Fragment는 Activity에 종속되어 있다.

3. Activity는 전체 화면을 차지하고, Fragment는 전체 화면이 아닌 일부 화면으로

구성할 수도 있기 때문에 상대적으로 유연한 UI디자인이 가능하다.

4. Activity는 자동적으로 Stack에 넣어지고, Fragment는 Transaction을 통해서 요청해야 한다.

 

이번 글은 이상으로 마치도록 하겠습니다.

 

반응형