본문 바로가기
공부/Android

Android - Fragment에서 requireContext, requireActivity, requireOOO 이게 뭘까?

by hhhello 2024. 6. 30.

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)
    }
}