스팀 앱 개발기 #146 - 개발 완료: Jetpack Compose 마이그레이션 1단계

개발 완료: Jetpack Compose 마이그레이션 1단계

No. 146
2026. 04. 24 (금) | Written by @dorian-mobileapp

저번 포스트에서 말씀드린 Jetpack Compose로 마이그레이션. 그중 1단계를 진행했습니다. 요약 내용은 다음과 같습니다.


Jetpack Compose 마이그레이션 1단계 개발 요약


목표

레거시 Fragment 클래스를 제거하고, 이미 구현되어 있는 Composable 함수 기반으로 코드를 정리


작업 내용

1. Fragment 클래스 제거 (7개)

각 파일에서 Fragment 클래스만 제거하고 Composable 함수는 유지했습니다.

파일제거된 클래스
TagsFragment.ktTagsFragment
ProfileFragment.ktProfileFragment
PostListFragment.ktPostListFragment
AccountDetailsFragment.ktAccountDetailsFragment
WalletFragment.ktWalletFragment
AccountHistoryFragment.ktAccountHistoryFragment
PostContentFragment.ktPostContentFragment

2. Import 정리

Fragment 클래스 제거에 따라 각 파일에서 불필요해진 import를 제거했습니다.

  • Fragment, AndroidEntryPoint, ComposeView, navArgs
  • Bundle, LayoutInflater, View, ViewGroup
  • ViewModelProvider, lifecycleScope, launch

3. mobile_navigation.xml 정리

Fragment 제거에 맞춰 대응하는 fragment 태그를 순차적으로 삭제했습니다.
최종적으로 모든 Fragment 대상이 제거되어 현재 빈 네비게이션 파일 상태입니다.

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/mobile_navigation">

</navigation>

4. PostComposable.kt import 정리

Fragment 삭제로 인해 불필요해진 참조를 제거했습니다.

// 제거된 import
import androidx.navigation.fragment.findNavController
import lee.dorian.steem_ui.ui.post.list.PostListFragment
import lee.dorian.steem_ui.ui.post.list.PostListFragmentDirections
import lee.dorian.steem_ui.ui.tags.TagsFragment
import lee.dorian.steem_ui.ui.tags.TagsFragmentDirections

5. 버그 수정 (AccountHistoryFragment.kt)

AccountHistoryItemListPreview에서 Composable 내 ViewModel 직접 생성 경고를 수정했습니다.

수정 방법: AccountHistoryItemList의 파라미터를 상태 호이스팅 패턴으로 변경

// Before: ViewModel 전체를 파라미터로 받음
fun AccountHistoryItemList(
    accountHistory: AccountHistory,
    viewModel: AccountHistoryViewModel,  // ← 경고 발생
    onMenuItemClick: (AccountHistoryItemLink) -> Unit
)

// After: 필요한 상태와 콜백만 받음
fun AccountHistoryItemList(
    accountHistory: AccountHistory,
    dgpState: State<DynamicGlobalProperties>,  // ← 상태만
    onAppend: () -> Unit,                       // ← 콜백만
    onMenuItemClick: (AccountHistoryItemLink) -> Unit
)

결과

항목1단계 시작 전1단계 완료 후
Fragment 클래스 수7개0개
mobile_navigation.xml fragment 태그 수7개0개
Composable 함수유지유지
Main2Activity 동작정상정상

현재 남은 레거시

Fragment 클래스는 모두 제거되었으나, 아래 항목들이 2단계 이후 작업 대상으로 남아있습니다.

  • MainActivity — DataBinding + XML Navigation (mobile_navigation.xml이 비어 동작 불가 상태)
  • SplashActivitysetContentView(R.layout.xxx) 방식
  • VoteListActivity + VoteListAdapter — RecyclerView + DataBinding 방식
  • BaseActivityDataBindingUtil 사용

GitHub Commit

보다 자세한 코드는 아래 commit을 참고하세요.


지난 스팀 앱 개발기


Layout provided by Steemit Enhancer hommage by ayogom

Posted using SteemX

Sort:  

Upvoted! Thank you for supporting witness @jswit.

🎉 Congratulations!

Your post has been upvoted by the SteemX Team! 🚀

SteemX is a modern, user-friendly and powerful platform built for the Steem community.

🔗 Visit us: www.steemx.org

✅ Support our work — Vote for our witness: bountyking5

banner.jpg