이 프로젝트는 xml + Compose로 이루어져있기 때문에,

Fragment위에 ComposeView를 이용하여 Compose 화면을 뛰우고 있다.

이 때, 아래와 같은 BaseFragment를 사용하고 있었는데,

abstract class BaseComposeFragment : Fragment() {

    protected abstract val fragmentViewModel: BaseViewModel
    private lateinit var composeView: ComposeView

    @Composable
    abstract fun ComposeLayout()

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View {
        return ComposeView(requireContext()).apply {
            composeView = this
        }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        viewLifecycleOwner.repeatOnStarted {
            fragmentViewModel.baseEventFlow.collect { handleEvent(it) }
        }

        composeView.setContent {
            ComposeLayout()
        }
    }

자기 전에 기술 아티클을 보던 도중 아래와 같은 게시글을 발견하고 리팩토링을 시도하게 되었다.