기본적으로 FragmentManager
는 프레임워크에서 제공하는 FragmentFactory
를 사용하여 프래그먼트의 새로운 인스턴스를 만든다. FragmentFactory는 리플렉션을 사용하여 프래그먼트의 파라미터가 없는 생성자를 찾아 호출하는데 이러한 부분 때문에 개발자가 파라미터가 있는 생성자를 직접 호출하여 프래그먼트를 인스턴스화 하는 코드가 있더라도 프래그먼트가 재생성 될때는 파라미터가 없는 생성자를 찾아서 호출하게 된다.
프래그먼트 클래스에 개발자가 정의한 파라미터가 있는 생성자만 있는 경우, 일반적인 유즈케이스에서 오류가 발생하지 않는다. 하지만 프래그먼트가 재생성 될 때, 다음과 같은 형식의 오류가 발생한다.
Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment com.example.MyFragment: could not find Fragment constructor
이 때 프레그먼트에 기본생성자를 추가해주면 문제를 해결 할 수 있다.
하지만, 생성자 파라미터를 참조하여 데이터를 로드하거나, UI에 표현할 로직을 수행하는 경우 기본 생성자는 아무런 인자를 전달받지 못하므로 프레그먼트가 재생성되기 이전에 상태를 저장하고 복원하는 로직이 필요할 수 있다.
0개의 댓글