feat: 8주차 미션_제로#58
Conversation
| @Composable | ||
| fun HomeScreen() { | ||
| val dummyProducts = remember { | ||
| mutableStateListOf( | ||
| Product(1, "Air Jordan XXXVI", "Basketball Shoes", "US$185", R.drawable.img_air_jordan_xxxvi, category = "Basketball Shoes"), | ||
| Product(2, "Nike Air Force 1 '07", "Men's Shoes", "US$115", R.drawable.img_nike_air_force, category = "Men's Shoes"), | ||
| Product(3, "Nike Everyday Plus Cushioned", "Training Socks", "US$20", R.drawable.img_nike_everyday_plus_cushioned, category = "Training Socks") | ||
| ) | ||
| } | ||
|
|
||
| LazyColumn( | ||
| modifier = Modifier.fillMaxSize(), | ||
| contentPadding = PaddingValues(bottom = 16.dp) |
|
|
||
| private fun setupComposeView() { | ||
| // Dummy wishlist data | ||
| val dummyWishlist = listOf( |
There was a problem hiding this comment.
더미를 페이지마다 만들지 말고 하나의 리스트로 통합하는 것도 좋을 것 같아요!
kimdoyeon1234
left a comment
There was a problem hiding this comment.
LazyVerticalGrid + items() DSL과 key를 올바르게 사용하신 점, ProductGrid, ProductList, ProductItem을 별도 파일로 분리해서 재사용성을 높이신 점 좋았습니다!
다만 HomeScreen Composable 함수가 HomeFragment 클래스 내부에 정의되어 있는데, Composable 함수는 Fragment 밖으로 분리하는 게 좋습니다! 별도의 HomeScreen.kt 파일로 분리해주세요!
그리고 Product 데이터 클래스의 isWishlisted 필드가 var로 선언되어 있는데, val로 선언하고 copy()로 새 객체를 만들어서 상태를 업데이트하는 패턴을 사용해주세요! Compose에서는 var 필드를 직접 변경해도 Recomposition이 트리거되지 않습니다!
더미 데이터도 각 Fragment마다 따로 선언되어 있는데, ViewModel로 통합 관리하시면 화면 간 상태 공유도 자연스럽게 해결됩니다!
아쉽게도 이번 미션의 핵심인 Compose 기반 Navigation으로의 전환이 아직 적용되지 않았습니다!
Fragment + XML 기반 Navigation 대신 NavController + NavHost + Type-safe Navigation으로 전환해주시면 완성도가 훨씬 올라갑니다! 화이팅
There was a problem hiding this comment.
HomeScreen() Composable 함수가 HomeFragment 클래스 내부에 정의되어 있는데, Composable 함수는 Fragment 밖으로 분리하는 게 좋습니다! 별도의 HomeScreen.kt 파일로 분리해주시면 가독성과 재사용성이 훨씬 좋아집니다!
There was a problem hiding this comment.
LazyColumn의 item { } 블록 안에 LazyRow를 중첩하고 있는데, 스크롤 방향이 달라서 크래시는 발생하지 않지만 LazyRow의 높이 측정이 제대로 되지 않아 레이아웃이 깨질 수 있습니다! LazyRow 대신 일반 Row로 구성하거나, LazyColumn 밖에서 높이를 명시적으로 지정해주세요!
There was a problem hiding this comment.
isWishlisted 필드가 var로 선언되어 있는데, Compose에서는 데이터 클래스의 필드를 직접 변경하면 Recomposition이 트리거되지 않습니다! val로 선언하고 copy()로 새 객체를 만들어서 상태를 업데이트하는 패턴을 사용해주세요!
📌 feat: 8주차 미션_제로
기존 XML 기반의 RecyclerView와 Adapter 구조를 Jetpack Compose의 LazyColumn으로 마이그레이션하여 UI 선언형 구조로 개선하고 코드 복잡도를 줄였습니다.
🔗 관련 이슈
Closes #이슈번호
✨ 변경 사항
HomeFragment:
WishlistFragment & PurchaseFragment:
참고 사항: HomeFragment는 XML 레이아웃을 사용하지 않고 onCreateView에서 ComposeView를 생성하여 반환하는 방식으로 전환되어 결합도를 낮췄습니다.
🔍 테스트
📸 스크린샷 (선택)
🚨 추가 이슈