Skip to content

[Mission] 요시 week8 완료#80

Open
LLUPINUS wants to merge 1 commit into
Yoshi/mainfrom
Yoshi/week8
Open

[Mission] 요시 week8 완료#80
LLUPINUS wants to merge 1 commit into
Yoshi/mainfrom
Yoshi/week8

Conversation

@LLUPINUS

Copy link
Copy Markdown

📌 PR 제목

요시 week8 완료

#️⃣ 연관된 이슈

closes #79


✅ 변경 사항

3주차 미션(RecyclerView)을 Compose의 LazyColumn으로 Migration

  • 기존 Recyclerview + adapter 코드를 LazyColumn 으로 교체
  • items() 함수를 사용하여 동일한 리스트 데이터 표시
  • 아이템 레이아웃을 Composable 함수로 새로 작성
  • 각 아이템에 고유한 key를 지정하여 상태 안정성 확보
  • 상품 우상단의 하트 토글을 이용해 위시리스트에 상품 추가 및 제거 기능
  • 각 상품 이미지 추가(중요)

📷 영상 및 스크린샷

작업 내용을 스크린샷 또는 영상 형태로 올려주세요.

android_week8_.mp4

🔗 알게 된 사항

워크북과 과제를 하며 알게 된 점을 작성해주세요

  • LazyListScope DSL 에서 제공하는 다양한 함수의 사용법에 대해 알 수 있었음
  • 아이템 사이의 간격을 추가하는 방법에 대해 알 수 있었음
  • LazyGrid의 두가지 방법에 대한 사용법을 알 수 있었음

📝 질문 사항

워크북과 과제를 하며 궁금했던 점을 작성해주세요

@LLUPINUS LLUPINUS requested a review from hw4nx02 May 23, 2026 17:18
@LLUPINUS LLUPINUS self-assigned this May 23, 2026
@LLUPINUS LLUPINUS requested a review from a team May 23, 2026 17:18
@LLUPINUS LLUPINUS added the 🚀Week 8 8주차 워크북 미션 label May 23, 2026

@hw4nx02 hw4nx02 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

8주차 피드백

안녕하세요, 요시🦖! 서서히 종강이 다가오는 게 느껴집니다... 조금 더 파이팅해봅시다!!

총평

이번 주에는 Compose에서의 리스트 구현에 대해 학습했는데요. 이는 성능과 안정성에 직접적인 영향을 미치는 요소입니다. 때문에 불필요한 Recomposition을 방지하고, 스크롤 가능한 컴포넌트의 올바른 사용에 대한 고민이 항상 필요한 지점이라고 볼 수 있겠습니다!
기존 RecyclerView 기반의 목록을 Jetpack Compose의 Lazy Composable (LazyColumn, LazyVerticalGrid)로 성공적으로 마이그레이션하셨네요. 전반적으로 Compose의 모범 사례를 잘 따르려는 노력이 돋보이며, 특히 목록 아이템에 안정적인 키를 부여한 점이 인상적입니다!

리뷰

Good!

1. Lazy Composable로의 성공적인 마이그레이션

HomeScreen.kt에서 기존 RecyclerView를 Compose의 Lazy Composable로 잘 전환하여, 데이터를 효율적으로 렌더링하고 메모리 사용량을 최적화할 수 있는 상채로 보입니다.

2. 안정적인 아이템 Key 지정

PurchaseScreen.kt와 WishlistScreen.kt에서 items(items = ..., key = { it.id })와 같이 Product 모델의 고유 ID를 키로 사용하셨네요. 이를 통해 Recomposition 효율성을 높이고, 아이템의 상태를 안정적으로 유지하는 데에 도움이 되는 것 같습니다.

3. 위시리스트 상태 관리 및 공유

WishlistRepositoryremember(context) { WishlistRepository(context) }를 사용하여 한 번만 생성하고, 이를 NavGraphBuilder.mainGraph와 함께 활용하여 여러 화면에 주입하여 공유하고 있습니다. 또한, 위시리스트 상태를 mutableStateOf를 사용하여 Compose에서 반응적으로 상태를 관찰할 수 있도록 구현한 것이 인상적입니다.


To Improve!

1. WishlistScreen의 리스트 구성 최적화

WishlistScreen.kt 파일의 val wishedProducts = SampleProducts.filter { it.id in wishlistIds } 부분에서 wishlistIds가 변경될 때마다 전체 SampleProducts 목록을 다시 필터링하고 있습니다.
이와 같은 방식의 경우, wishlistIds가 변경될 때마다 SampleProducts 전체를 필터링하는 작업은 목록의 크기가 커지거나 wishlistIds의 변경이 잦을 경우 불필요한 Recomposition 및 성능 저하를 유발할 수 있습니다. 이 필터링 로직을 derivedStateOf로 감싸서 wishlistIds가 실제로 변경될 때만 재계산되도록 최적화하는 것을 고려해볼 수 있을 것 같습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🚀Week 8 8주차 워크북 미션

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants