까먹기 전에 줍줍..
🎯 XML vs Compose의 "생명주기 + context" 구조 차이
XML 기반
- Activity나 Fragment가 View를 직접 소유
- View는 Activity가 죽을 때 context도 같이 정리됨 → context를 View 내부에서 써도 큰 문제가 없다
- 즉, UI는 생명주기를 따라감
Compose 기반
- UI 자체가 "함수로 구성된 상태 기반 UI"
- 상태에 따라 UI가 수시로 재구성(recomposition) 되기에 Activity와 느슨하게 연결됨
- 그래서 UI 함수 내에서 context를 막 쓰면, 그 시점에 context가 유효하지 않을 수 있음
XML : context가 항상 Activity와 뷰 안에 있고, 생명주기를 같이 가져가니까 자유롭게 써도 괜찮았지만,
Compose : UI 함수들이 Activity 생명주기와 독립적으로 돌아가기도 하니까, context를 직접 관리하지 않으면 위험
✅ 그래서 context는 명시적으로 전달해야 한다!
@Composable
fun MyComposable(context: Context) { ... }
: 이 함수가 context가 꼭 필요한 걸 명확히 드러낼 수 있음
호출 시점에서도 context를 보장된 상태에서 넘기게 되니까 → 버그 줄고, 메모리 릭 위험도 줄고, 테스트도 쉬워짐
⚠️ 잊지말자
Compose는 함수형 UI는 예측 불가능한 시점에 다시 실행될 수 있다
예를 들어 context를 갖고 있던 composable 함수가 ViewModel의 상태 변화로 인해 다시 실행되었는데 → 앱이 크래시 나거나, 이상한 동작 발생 ,,
compose하다보면 Recomposition이 굉장히 중요한데, 이렇게 context같은 부분을 빼먹지않도록 유념해야한다,,
'🤖 Compose' 카테고리의 다른 글
[Compose] LazyColumn 성능을 위해 (0) | 2025.05.13 |
---|---|
[Compose] 의존성 주입 (Dependency Injection) (ft.hilt) (0) | 2025.02.11 |
[Compose] 안정성 stability (0) | 2025.02.09 |
[Compose] Rendering (0) | 2025.01.31 |
[Compose] Compose의 LifeCycle (0) | 2025.01.27 |