1. 찾아보게 된 이유
강의를 듣다보니 강사님은 onBackPressed를 사용하셨을 때 문제가 없으셨는데 onClick때처럼 줄이 그어져 있어서 요즘 권장하는 것은 무엇일까 하고 찾아보게 되었다.
2. onBackPressed
onBackPressed는 안드로이드 시스템에서 제공하는 메서드로, 사용자가 뒤로 가기 버튼을 눌렀을 때 호출됩니다. 이 메서드는 Activity 클래스에 정의되어 있으며, 기본적으로 현재 액티비티를 종료하고 이전 액티비티로 돌아가는 동작을 수행합니다.
하지만 개발자가 onBackPressed를 오버라이드(재정의)하면, 뒤로 가기 버튼을 눌렀을 때의 동작을 사용자 정의할 수 있습니다. 예를 들어, 특정 화면에서 뒤로 가기 버튼을 눌렀을 때 앱을 완전히 종료하거나, 또는 다른 화면으로 이동하도록 할 수 있습니다.
다음은 onBackPressed를 오버라이드하는 예입니다:
override fun onBackPressed() { // 뒤로 가기 버튼을 눌렀을 때의 동작을 여기에 작성합니다. // 예를 들어, 특정 화면으로 이동하거나 앱을 종료할 수 있습니다. }
2-1. onBackPressed를 권장하지 않는 이유
가장 큰 이유는 사용자의 경험과 fragment 관리 측면에 있다고 한다.
사용자 경험 : onBackPressed를 오버라이드하면 사용자가 기대하는 뒤로 가기 버튼의 기본 동작을 변경할 수 있게된다. 일반적으로 사용자는 뒤로 가기 버튼을 눌렀을 때 이전 화면으로 돌아가거나 앱이 종료되기를 기대해야 한다. 그러나 onBackPressed를 사용하게 되면 이러한 기본 동작을 변경하게 되어 사용자에게 혼동을 줄 수 있기 때문에 권장되지 않는다고 한다.
fragment 관리 : onBackPressed를 직접 관리하게 되면 fragment stack을 직접 관리해야 할 수 있게 된다. 이로 인해서 복잡하고 수정하기 어려운 오류를 발생시킬 수도 있게 된다. 안드로이드 스튜디오에서는 이 문제를 해결하기 위해서 Navigation Component를 도입했다. Navigation Component를 사용하게 되면 뒤로 가기 버튼의 동작을 자동으로 관리해주므로, 개발자는 onBackPressed를 직접 관리할 필요가 없게 된다.
따라서, 안드로이드 스튜디오에서는 onBackPressed의 사용을 권장하지 않고 있다고 한다. onBackPressed를 사용하기 보다는 Navigation Component와 같은 도구를 사용하여 뒤로 가기 버튼의 동작을 관리하는 것이 조금 더 바람직하다고 보는 것 같다.
2-2. Navigation Component는 뭘까?
안드로이드에서 뒤로 가기 버튼의 동작을 관리하려면 "Navigation Component"를 사용하는 것이 좋습니다. Navigation Component는 안드로이드 Jetpack의 일부로, UI 내비게이션을 단순화하고 뒤로 가기 버튼 같은 안드로이드의 기본 내비게이션 패턴을 자동으로 구현해줍니다. Navigation Component를 사용하면 뒤로 가기 버튼의 동작을 직접 관리하지 않아도 되므로, 코드가 간결해지고 유지 관리가 쉬워집니다. 따라서 Navigation Component를 사용하면 onBackPressed를 직접 관리하는 복잡함을 피할 수 있습니다. 그 외에도, 안드로이드에서는 "Activity.onBackPressedDispatcher"를 통해 뒤로 가기 버튼의 동작을 좀 더 세밀하게 관리할 수 있습니다. 이를 통해 특정 상황에서만 뒤로 가기 버튼의 동작을 변경할 수 있습니다.
2-3. onbackpresseddispatcher
onBackPressedDispatcher는 안드로이드에서 뒤로 가기 버튼의 동작을 관리하는데 사용되는 클래스라고 한다.
Activity나 Fragment에서 getOnBackPressedDispatcher() 메서드를 호출하여 OnBackPressedDispatcher 인스턴스를 얻을 수 있다고 한다. 추가로 OnBackPressedDispatcher를 사용하게 되면 뒤로 가기 버튼의 동작을 조금 더 세밀하게 조절이 가능할 수 있도록 해준다 그리고 OnBackPressedDispatcher에 OnBackPressedCallback을 등록하면, 뒤로 가기 버튼이 눌렸을 때 실행할 코드를 정의할 수도 있게 해준다. 마지막으로 OnBackPressedCallback의 handleOnBackPressed() 메서드를 오버라이드하여 원하는 동작을 정의할 수 있고 이 메서드는 뒤로 가기 버튼이 눌렸을 때 호출되어 진다.
class MyFragment : Fragment() {
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
// OnBackPressedCallback을 생성하고 등록합니다.
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// 뒤로 가기 버튼이 눌렸을 때 실행할 코드를 여기에 작성합니다.
}
})
}
}
사용 방법은 이와같다.
onBackPressedDispatcher를 사용하게 되면 onBackPressed를 직접 오버라이드하는 것보다 더 유연하게 뒤로 가기 버튼의 동작을 관리할 수 있다고 한다.
3. 마무리
코틀린과 안드로이드 스튜디오를 배우면서 느끼고 있는 점은 개발자와 사용자의 입장을 모두 생각해서 새로운 것들이 추가되고 제거되어지는 것 같다. 반대로 생각을 해본다면 사용되어지는 기술의 변화 속도가 굉장히 빠르고 새롭게 습득해야할 지식이 방대해진다는 것이기도 하지만 말이다. 새롭게 배우는 입장에서는 그 당시 기준으로 신기술을 접하고 편의성이 올라간 것을 배워서 좋지만 배우고 난 뒤에는 새롭게 추가되는 기술들을 예의주시하고 있어야 한다는 점에서 단점으로 받아들여질지도...? 암튼 새로운 것을 배운다는 것은 언제나 재밌다.
'Framework > Android studio' 카테고리의 다른 글
코틀린을 이용한 Todo앱 (0) | 2023.12.11 |
---|---|
Android 컴포넌트는 무엇이 있을까? (0) | 2023.12.05 |
쓰임 있는 사람이 되기 위해 노력 중입니다.