본문 바로가기
Development/Android (Kotlin)

Activity와 Fragment의 수명주기에 대해 알아보자!

by 수달05 2020. 7. 2.

안녕하세요~!

 

개발새발 개발자 수달입니다 :)

 

저번 게시물에서 안드로이드 앱의 기본 요소에 대해 알아보았는데요~

https://devlog-h.tistory.com/23

 

[Android] Application과 기본요소!

안녕하세요 :) 개발새발 초보 프로그래머 수달입니다. Android Studio를 이용하여 애플리케이션을 개발하기에 앞서, - 대체 이 Application은 무엇인지! - 무엇으로 구성되어 있는지! - 어떻게 구성해야 �

devlog-h.tistory.com

오늘은 그 중에서도 Activity와 관련된 내용들에 대해서 조금 더 살펴보고자 합니다 :)

 

그 내용은 바로바로~~~~~~

 

Activity와 Fragment!



그럼 오늘도 힘차게 알아봅시다! 빠샤!

 

 

 

 

1. Activity

 

저번 게시물에서 Activity에 대하여 살펴보았었는데요~!

 

기억이 잘 안나시는 분들을 위해, 다시 한 번 짚어보며 넘어가보겠습니다. :)

 

An activity is the entry point for interacting with the user. It represents a single screen with a user interface.

 

Activity는 사용자와 상호작용하기 위한 진입점이다. 사용자 인터페이스가 있는 단일 화면을 나타낸다!

 

즉, 하나의 기능을 수반하는 유저 인터페이스는 Activity라고 이야기 했었습니다. :)

 

잘 이해가 되지 않는다구요??? ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

치즈덕 짤 [https://m.blog.naver.com/azzi_01/221678821647]

 

 

그건 너무 속상하니까 저번 게시물을 보고 오는걸로 합시다. 하하하

 

2. Fragment

 

넵! 오늘의 중요한 개념! 바로바로......

 

Fragment 입니다!

 

구선생님 알려주세요!

 

Fragment란 파피요온(papyeon) 이라는 뜻을 가지고 있는데요!

 

파피요온 = 파편

 

 

Android Studio에서의 Fragment는 Fragment Activity 내부의 어떤 동작, 또는 인터페이스의 일부를 나타냅니다~!

 

A Fragment represents a behavior or a portion of user interface in a FragmentActivity.

 

 

Fragment Activity 생성 예시

 

Fragment Activity는 말 그대로, Fragment를 포함한 Activity입니다~!

 

 

??? : "네..? Activity가 Fragment를 포함한다구요..?"

치즈덕 짤 [https://m.blog.naver.com/azzi_01/221678821647]

 

놀랍지 않나요?!

 

Activity도 하나의 기능을 가지는 인터페이스라고 했는데, '어떤 동작, 또는 인터페이스의 일부'들을 포함한다니..!

 

 

 

사실 Fragment라는 개념이 나오게 된 계기는 바로 태블릿 때문인데요..!

 

Galaxy S2 (강철폰..!)

이렇게 작았던 화면에서 이뤄지던 앱의 액티비티가 화면이 커지게 되면서 UI 구성요소 조합 및 상호 교환을 진행할 공간이 많아지게 된 것입니다!!

화면이 매우 커어어어졌다..! (이정도는 아닌가?)

 

아래 그림을 보시면, 이해가 좀 더 쉽게 될 것 같습니다. :)

 

그럼 이제 Fragment에 대해 좀 더 명확하게 이해해봅시다.

Fragment Example

기존 스마트폰과 같은 기기에서 두 화면에 보여주어야 했던 화면구성 A, B가 있습니다!

 

그런데, 화면이 커짐에 따라, Layout의 비율과 크기가 달라짐에 따라서, 화면구성 A, B를 한꺼번에 넣을 수 있게 된 것이죠.

 

 

??? : "그럼 그냥 Activity에서 정의해서 화면을 구성하면 되지 어려운 개념을 만들어서 사용하나요..?"

 

 

 

하기싫어,,,, 화면마다 새로운 Activity 새로 구성하기 싫어,,,,

그렇게 되면 같은 기능을 가졌지만, 글자가 바뀐다던지,,, 조금의 변화에도 새로운 구성을 해야합니다.

 

즉, 모듈식 구성을 명확하게 사용할 수 없죠..!

 

- 모듈식 구성이란?

 

건물을 건축하는 과정을 통해 설명해드리도록 하겠습니다~

 

같은 건물을 짓더라도, 처음부터 새로이 시작하는 과정은 매우 오래 걸리며, 해야하는 작업이 많습니다...!

 

 

기초 공사를 진행하고,, 철근과 콘크리트를 세우고,,, 기둥을 세우고,, 벽을 세우,,,,,,

뚝딱뚝딱...!

복잡하죠..?

 

이 때, 모듈이라는 구성을 통해서 일부가 제작되어 있고, 이를 가져다가 쓰는 방식이라면 어떨까요??

 

조립조립!

필요하다고 생각되는 기능을 공간에 가져다가 사용하면 됩니다!

 

 

즉, 모듈식 구성이란, 필요한 기능을 구현하고, 자유롭게 조립하듯이 사용할 수 있는 방식을 의미합니다!

 

 

즉, Fragment라는 Activity하부의 모듈을 제작하여 개별적으로 추가, 제거하여 작업이 가능케 한 것입니다!

 

간단한 Fragment 예시

위의 Fragment 예시를 통해 확인하시면, 하나의 큰 Activity에서 버튼을 통하여 Fragment가 바뀌는 모습을 확인하실 수 있습니다.

 

 

3. Activity와 Fragment의 수명주기

 

수명주기라니... 너무 무섭지 않나요??

 

하지만,, Activity와 Fragment는 생명체와 같이 태어나기도 하고 죽기도 한답니다.. 흑흑 ㅠㅠㅠ

흑흑 너무 슬퍼 ㅠㅠㅜ

 

사용자의 디바이스는 한정적인 리소스와 용량을 가지고 있기 때문에 더 중요한 작업과 사용자가 원하는 작업을 계속적으로 진행해주고자 합니다.

 

즉, 생성된 Activity와 Fragment를 모두 태어난 상태로 배불리 밥을 먹여주며, 유지시켜줄 수가 없다는 것이죠..!

 

그렇기에, 효율적 관리를 하기 위해서 시스템에서 없애기도 생성시켜 관리하기도 합니다.

 

이러한 과정에서 Activity와 Fragment와 같은 어떤 동작과 인터페이스는 생성과 실행 중지, 실행 종료 등 다양한 과정을 거치게 됩니다!

 

 

이 때, 유저 및 시스템의 다양한 상황에 수명주기가 잘못 형성되어 데이터와 상황이 제대로 저장되거나 전달되지 않으면 다음과 같은 문제가 발생할 수 있습니다.

 

- 사용자가 앱을 사용하던 중, 전화가 왔다! -> 갑자기 앱 데이터가 손실되었다.

- 앱을 활발하게 사용하지 않는 경우, 리소스가 낭비된다. (시스템은 이걸 잘 모르고 있다..!)

- 사용자가 앱에서 나갔다가 돌아왔더니, 진행상태가 초기화됐다.

- 가로, 세로 화면전환 과정에서 비정상적으로 종료되거나, 진행상태가 저장되지 않았다.

 

 

너무 황당하지 않나요..? 앱이 내가 하고있는 활동을 기억하지 않는다니...

 

여러분들이 오랜시간동안 노력을 들여 진행한 상황이 있을 때, 갑자기 전화가 와서 초기화가 되는 상황이 발생할 수 있다는 의미입니다!

으악! 상상만해도 화나

 

그렇기에 우리는 수명주기와 관련된 콜백 메소드를 잘 구성하여 이러한 문제를 예방해야 합니다!

 

1) Activity의 수명주기

 

Activity는 아래와 같은 수명주기를 가지게 됩니다.

 

 

<생성 -> 시작 -> 재개 -> 잠시 멈춤 -> 진짜 멈춤! -> 실행 종료>

Activity Life Cycle

이러한 과정을 정의해주는 메소드가 바로 콜백 메소드인데요!

 

총 여섯 개로 구성되어있습니다.

- onCreate()

- onStart()

- onResume()

- onPause()

- onStop()

- onDestroy

 

이러한 메소드는 Activity가 새로운 상태에 들어가게 되면 호출되는데요,

 

onCreate() 예시

Activity를 생성할 때, 가장 기본적으로 작성되는 onCreate()가 바로 이것을 의미합니다. :)

 

즉, 앱을 효율적이고 안전하게 구동하기 위해서는 이러한 콜백을 명확히 구성하여 다양한 문제를 예방해야겠죠??

 

2) Fragment의 수명주기

 

Fragment의 수명주기라니,,, Activity에 포함되니까 이건 수명주기가 따로 없는 줄 아셨다구요..?

 

천만의 말씀 만만의 콩떡!

(유행어로 밀고 있습니다 하하)

 

Fragment 또한 개별적인 모듈이라고 설명했습니다. 

 

즉, 이들도 자체적인 수명주기를 가지게 됩니다. :)

 

하지만, Fragment는 Activity에서 가져와서 사용하기 때문에, Activity의 onPause(), onDestroy() 같은 상황에서는 함께 멈추고 사라집니다!

 

하지만, Activity가 onResume() 상태 일 때, 

 

즉, Activity가 잘 수행되고 있을 때에는 각 Fragment마다 개별적인 수명주기를 갖게 됩니다!

 

Fragment의 콜백메소드의 예시는 아래와 같습니다!

- onCreate()

- onCreateView()

- onPause()

...

 

여기서 onCreateView()는 onCreate() 메소드에 view(UI제공)를 반환합니다.

=> 없는 경우에는 NULL을 반환합니다. :)

 

 

정리해보자면, Activity와 Fragment가 모두 수명주기를 가지며, 큰 프로젝트에서 개발을 진행할 때에는 이러한 수명주기 관리가 매우 중요하다고 볼 수 있습니다!

 

많은 Activity와 Fragment가 얽히고 섥히면,,,, 오우 생각만해도 복잡하겠죠..?

저는 이해하는 것 만으로도 ㅎ

 

 

 

 

 

 

 

오늘 내용은 유익하셨나요??

 

점점 갈 수록 어려운 개념과 나눠지는 세부적 사항이 많아지네요..!!

 

하지만, 이 모든 것들이 우릴 성장시키고 편리하게 만들어 줄 것이라는거!

 

 

다음엔, 또 다른 유익한 정보를 가지고 돌아오겠습니다. :)

 

오늘은! 여기까지!

 

 

 

 

참고자료: https://developer.android.com/training/basics/fragments/creating

 

프래그먼트 만들기  |  Android 개발자  |  Android Developers

프래그먼트를 활동의 모듈식 섹션이라고 생각할 수 있습니다. 자체 수명 주기가 있고 자체 입력 이벤트를 수신하며 활동이 실행되는 동안 추가하거나 삭제할 수 있습니다. 재사용할 수 있는 '하

developer.android.com

 

댓글