스팀 앱 개발기 #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.kt | TagsFragment |
| ProfileFragment.kt | ProfileFragment |
| PostListFragment.kt | PostListFragment |
| AccountDetailsFragment.kt | AccountDetailsFragment |
| WalletFragment.kt | WalletFragment |
| AccountHistoryFragment.kt | AccountHistoryFragment |
| PostContentFragment.kt | PostContentFragment |
2. Import 정리
Fragment 클래스 제거에 따라 각 파일에서 불필요해진 import를 제거했습니다.
Fragment,AndroidEntryPoint,ComposeView,navArgsBundle,LayoutInflater,View,ViewGroupViewModelProvider,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이 비어 동작 불가 상태)SplashActivity—setContentView(R.layout.xxx)방식VoteListActivity+VoteListAdapter— RecyclerView + DataBinding 방식BaseActivity—DataBindingUtil사용
GitHub Commit
보다 자세한 코드는 아래 commit을 참고하세요.
지난 스팀 앱 개발기
- #145 - 개발 계획: Jetpack Compose 마이그레이션
- #144 - 개발 완료: 리팩토링: 타입 안전성과 일관성 개선
- #143 - 개발 완료: 내비게이션 컴포즈 활용하여 프로필 화면으로부터 다른 화면 이동
- #142 - 개발 완료: API 연동 코드 자동 생성 방안
- #141 - 개발 완료: Main2Activity 관련 리팩토링
- #140 - 개발 완료: Navigation Compose 활용하여 태그 화면에서 포스트 화면 이동
- #139 - 개발 완료: Main2Activity 클래스를 추가하고 내비게이션 라이브러리 변경
- #138 - 개발 완료: Hilt 라이브러리 활용한 의존성 주입 구현
- #137 - 개발 완료: libs.versions.toml 파일 생성
- #136 - 개발 완료: 사용자 히스토리 화면에서 스팀파워 보상을 SP로 보여주기
- #135 - 개발 완료: 태그 및 포스트 리스트 화면에서 텍스트의 HTML 태그 제거
- #134 - 개발 완료: (1) 태그/포스트 리스트 화면의 포스트 항목에 댓글 개수 보여주기 (2) 댓글 리스트를 Jetpack Compose로 리뉴얼
- #133 - 개발 완료: (1) 검색 버튼 클릭시 키보드 숨기기 (2) 버그 수정: 팔로잉 계정 수 오류
- #132 - 개발 완료: 포스트 이미지 페이저 화면에 XML 대신 Jetpack Compose 적용
- #131 - 개발 완료: 프로필 이미지 화면에 XML 대신 Jetpack Compose 적용
- #130 - 개발 완료: 태그 화면에 XML 대신 Jetpack Compose 적용
- #129 - 개발 완료: 지갑 화면에 XML 대신 Jetpack Compose 적용
- #128 - 개발 완료: 포스트 리스트 화면에 XML 대신 Jetpack Compose 적용
- #127 - 개발 완료: 프로필 화면에 XML 대신 Jetpack Compose 적용
- #126 - 개발 완료: 계정 히스토리 화면에 XML 대신 Jetpack Compose 적용
- #125 - 개발 완료: 댓글 리스트 바텀시트에 XML 대신 Jetpack Compose 적용
- #124 - 개발 완료: 포스트 화면에 XML 대신 Jetpack Compose 적용
- #123 - 개발 완료: 계정 상세 화면
- #122 - 개발 완료: 포스트 화면에서 댓글 리스트 보여주기
- #121 - 개발 완료: 사용자 히스토리 화면에서 항목 클릭시 링크 팝업 띄우기
- #120 - 개발 완료: 사용자 히스토리 화면
- #119 - 개발 완료: Comments, Replies 화면
- #118 - 개발 완료: 포스트(Posts) 화면
- #117 - 개발 완료: 블로그 화면
- #116 - 개발 완료: 프로필 화면
- #115 - 개발: 프로필 화면 구현에 필요한 ProfileViewModel 클래스 개발
- #114 - 수정: 태그 화면의 포스트 리스트 항목 레이아웃 변경
- #113 - 오류 수정: 태그 리스트 로딩 중 다른 화면 이동하면 앱 비정상 종료
- #112 - 포스트 화면에서 보팅 리스트 화면으로 연결
- #111 - 시작 화면 추가
- #110 - 오류 수정: 지갑 화면 시작시 오류 토스트 뜸
- #109 - 개선: 태그 입력하고 검색 버튼 클릭 또는 엔터 키 누르면 키보드 닫기
- #108 - 개선: 태그 검색창에 엔터 키 적용
- #107 - 버그 수정: 태그 화면 복귀시 포스트 리스트 다시 로딩됨
- #106 - 포스트 화면 개발
- #105 - 포스트 화면의 로직 처리를 담당할 PostViewModel 클래스 개발
- #104 - 포스트 내용 읽기 기능을 Repository, Use Case 패턴에 적용
- #103 - 포스트 내용을 읽기 위한 bridge.get_discussion API 연동 코드 작성
- #102 - 포스트 내용을 읽기 위한 bridge.get_discussion API
- #101 - build.gradle에서 라이브러리 이름과 버전 통합
- #1 ~ #100
Layout provided by Steemit Enhancer hommage by ayogom
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