오늘은 화상 면접을 봤습니다. 3년차 이상 개발자를 뽑는 자리였지만 신입의 패기로 지원했어요.
면접관님 "Activity와 Fragment의 생명 주기에 대해서 얘기해주세요"
나 "어버버 어버버..." (틀린 내용 얘기함)
소 잃고 뇌 약간 고친다는 말처럼 뒤늦게나마 Android의 다양한 생명주기에 대해 알아보려고 합니다.
Activity는 Lifecycle을 가져요. 사람도 아닌데 생명주기가 왜 필요할까요? 왜냐면 모바일 환경은 리소스가 한정적이기 때문입니다. '어떻게 하면 리소스를 줄일 수 있을까'하는 고민 끝에 사용하지 않는 Activity는 잠깐 죽여놓는(?) 방식을 선택한 것 같아요.
1. Activity의 상태(Lifecycle Event)
Lifecycle은 크게 세 가지 상태로 나뉘는데요, Created, Started, Resumed 입니다.
1. Created
Java에서 Class 단위로 컴파일되는 것처럼, Android에서는 Activity 단위로 빌드됩니다. 사용자가 Activity를 볼 수 있도록 준비하는 상태가 Created입니다. 이름이 이해하기 쉽죠?
2. Started
Started는 Created 상태를 거쳐 Activity를 볼 준비를 마쳤지만, 아직 사용자와 상호작용할 수 없는 상태입니다. Activity가 다른 Activity나 View에 의해 일부 가려지거나, 전화가 오거나, 화면이 꺼지는 등의 경우에도 Started 상태가 됩니다.
3. Resumed
드디어! Created와 Started를 거쳐 원하는 단계까지 왔습니다. Resumed는 사용자가 Activity를 보며 상호작용할 수 있는 상태입니다.
Android의 Activity는 상황에 따라 이 세 가지의 상태를 넘나들어요. 이를 통해 필요한 기능만 활성화하여 리소스를 아낄 수 있습니다.
2. 생명주기 메서드
상태가 변할 때 생명주기와 관련한 콜백 메서드가 호출되기 때문에 생명 주기에 따라 원하는 내용을 실행할 수 있어요.
그림에서 볼 수 있듯이 상태를 옮겨갈 때 다양한 콜백 메서드가 호출되는데요, 그 중에서 중요한 메서드만 알아볼게요.
1. onCreate()
아마 Android Studio를 이용해보셨다면 onCreate()라는 메서드를 보신 적이 있을 거에요. 이 메서드가 Activity를 생성하는 메서드이고, 전체 생명주기에 걸쳐서 딱 한 번만 실행돼요. Activity를 생성하는 내용을 담고있는 만큼, 유일하게 필수적으로 구현해야 하는 메서드입니다.
보통은 이 메서드에서 레이아웃과 리소스 파일을 연결합니다. 또, savedInstanceState을 통해 저장된 값을 받아올 수도 있어요.
2. onPause()
Activity가 다른 Activity에 의해 일부분 가려질 때 호출돼요. 해당 Activity는 더이상 사용자와 상호작용할 필요가 없기 때문에 리소스가 큰 작업을 취소할 수 있어요.
하지만 아주 짧게 실행되기 때문에 시간이 오래 걸리는 작업을 실행하면 안됩니다. 예를 들어서 데이터를 서버 DB에 저장한다거나, 네트워크를 호출하는 작업은 해당 메서드가 아니라, onStop() 메서드에서 실행해야 해요.
여기까지 Activity의 Lifecycle에 대해 알아봤는데요, 다음에 나올 Fragment의 Lifecycle도 이와 비슷해서 이해하기 어렵지 않을 거에요. 여러분들은 이 글의 내용을 잘 숙지하셔서 면접에서 질문이 들어와도 잘 대답하시길 바래요!
읽어주셔서 감사합니다~ 질문이나 틀린 내용에 대한 이야기는 댓글로 달아주세요 😉
참고 자료
천인국, 「안드로이드 프로그래밍」
'Android' 카테고리의 다른 글
Coroutine ② (0) | 2023.12.24 |
---|---|
Fragment (0) | 2023.12.09 |
Retrofit (1) | 2023.12.05 |
Clean Architecture (0) | 2023.08.12 |