Fragment에 requi….이라고 치면 require어쩌구~ 관련된 메서드들이 왕창 나오게 된다.
사실 requireContext, requireActivity이런 메서드들의 구현부를 보면 별 거 없다.
context, activity같은 게 있다면 NotNull타입으로 정상 반환하고 없다면 IllegalStateException을 발생 시킨다.
@NonNull
public final FragmentActivity requireActivity() {
FragmentActivity activity = getActivity();
if (activity == null) {
throw new IllegalStateException("Fragment " + this + " not attached to an activity.");
}
return activity;
}
그럼 require이 붙은 메서드들을 도대체 왜 쓸까?
그냥 activity?.let {} 또는 activity!!을 사용해서 null값을 처리하면 되지 않을까?
아니다. null을 따로 핸들링 해주는 경우가 아니라면 require이 붙은 메서드를 사용하는 게 좋다. 어차피 null exception이 터지는데 require메서드를 사용하면 더 분명한 exception을 터트리기 때문이다. 또, null관련 처리를 해줘도 되지 않아 코드도 깔끔해진다.
정상적인 lifeCycle에 속하는 코드 안에서는 require에 붙은 메서드를 사용하는 게 좋다.
아래는 require관련된 메서드들이다. requireParentFragment의 경우 상위 Fragment가 있어야 null이 뜨지 않기 때문에 상위 Fragment가 없는 경우 사용하지 않아야 한다.
class BlankFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
requireView()
requireHost()
requireContext()
requireActivity()
requireParentFragment()
requireArguments()
view
host
context
activity
parentFragment
arguments
return inflater.inflate(R.layout.fragment_blank, container, false)
}
}