면접에서 화면 회전 같이 구성 변경이 일어나면 생명주기가 어떻게 동작되는지 물어보았다.
정말 간단한 질문이였던 것 같은데 이걸 제대로 답하지 못한걸 보면 기능 구현만 하고 아직 안드로이드에 대해 자세히 알지 못한다는 것이지.. 실제로 면접에서는 엉뚱한 답변을 내놓았다.
내가 말한 답변
화면 회전 시 onPause -> onStop 이후 onRestart()가 실행되어 다시 onResume()으로 갑니다. 이 과정에서 초기화 했던 변수가 다시 처음 실행했을 때의 값으로 변경되어 다시 사작하기 전에 onSavedInstanceState()에 Bundle객체로 저장하고 다시 화면이 구성 했을 때 저장한 값을 가져와 유지하도록 합니다.
와우.. 정말 바보같은 대답 onResume()으로 가면 어차피 값이 onCreate()에서 초기화할 텐데 그럼 변수가 다시 초기값으로 돌아가는 일이 없을텐데 이런 말을 하고 앉았다.
그럼서 직접 프로젝트를 통해 확인해보자.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
Log.e("Chan", "onCreate")
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
MyApplicationTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Greeting(
name = "Android",
modifier = Modifier.padding(innerPadding)
)
}
}
}
}
override fun onStart() {
super.onStart()
Log.e("Chan", "onStart")
}
override fun onResume() {
super.onResume()
Log.e("Chan", "onResume")
}
override fun onPause() {
super.onPause()
Log.e("Chan", "onPause")
}
override fun onStop() {
super.onStop()
Log.e("Chan", "onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.e("Chan", "onDestroy")
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
Log.e("Chan", "onSavedInstanceState")
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
Log.e("Chan", "onRestoreInstanceState")
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = "Hello $name!",
modifier = modifier
)
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
MyApplicationTheme {
Greeting("Android")
}
}
정말 간단하게 각화면이 어떻게 동작하는지 로그를 통해 알아본다.
먼저 앱을 실행하면 아래와 같다.

앱 실행 시 onCreate -> onStart -> onResume이 발생한다.
그렇다면 앱이 회전하면 어떻게 동작할까? 결과는 아래와 같다.

onPause -> onStop -> onsvaedInstanceState -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
순서로 동작한다.
액티비티가 onDestroy까지 동작 후 다시 onCreate부터 화면이 나타나는 onResume까지 동작하는 것을 볼 수 있다..
후.. 이걸 예전에 알고 있었는데 까먹어서 면접 때 답을 못했다.. 간단한 질문인데 이것조차 답변을 못해서 아쉬움이 많이 남는 면접이였던 것 같다.
이렇게 실제 면접에서 이런 질문을 했을 때 대답 못한거면 준비를 제대로 안한다는걸 다시 한 번 느끼게 되었다. 이번 계기로 간단한 것이라도 한 번 다시 복습을 해야한다는 것을 알았다.