반응형
컴포즈 코드 작성시 유의할 점(네이밍, 상태, 데이터 전달)
이제 컴포즈 실전에 투입했다.
공부 하고, 알아 보면서 유의할 점과 경험 했던 것들을 정리 해보려고 합니다.
도움이 되시길 바랍니다.!
컴포저블 함수 네이밍
- 파스칼 표기법(PascalCase): UI 컴포넌트형 컴포저블 함수는 HomeScreen처럼 대문자로 시작하는 단어들을 연결하여 선언합니다.
- 카멜 표기법(CamelCase) + 동사구: 값을 반환하는 컴포저블 함수는 rememberScrollState처럼 소문자로 시작하며 동작을 표현하는 네이밍을 사용합니다.
상태 복제
- 상태를 가공하거나 복제한 데이터를 전달하면, 전달된 데이터는 상위와 하위 사이에서 더 이상 동기화되지 않습니다.
@Composable
fun TransformedCounter(count: Int) {
val transformedCount = count * 2 // 변환된 상태
Text("Double Count: $transformedCount")
}
복제된 상태를 동적으로 업데이트 하려면?
- Compose에서는 상태에서 파생된 값을 계산할 때 derivedStateOf를 사용
상위에서 하위로 데이터 내려주는 구조
데이터는 항상 상위에서 하위로 전달되고, 하위 컴포저블은 데이터를 직접 변경하지 않고 상위로 이벤트를 전달하여 데이터를 수정하도록 요청
Compose에서 하위 컴포저블은 데이터를 직접 변경하지 않습니다. 대신 상위 컴포저블에 이벤트를 전달하여 데이터 변경을 요청
val red = color.val.red
질문) 상위의 값을 변수로 재 설정 하면 참조가 끊기는거 아니야? val red부분
- 예제에서 val red = color.value.red 부분이 참조를 끊는 것처럼 보일 수 있지만, 이는 Compose의 상태 추적과는 무관합니다.
- val red = color.value.red는 color.value의 현재 값에서 red 속성을 복사한 것입니다.
- red는 정적 값이며, color가 변경되어도 red는 갱신되지 않습니다.
- 따라서, red는 새로운 color 상태를 추적하지 않습니다.
하위 컴포저블에서 값을 직접 변경하지 말아야 하는 Compose의 설계 원칙을 해결하는 방식 중 하나가 바로 버블업(Bubble Up)
버블업과 ViewModel 비교
1. 버블업
장점)
컴포저블 재사용성:
- 하위 컴포저블은 상태를 직접 소유하지 않으므로 다양한 상위 컴포저블과 함께 재사용 가능.
단순한 상태 관리:
- 상태가 특정 컴포저블 트리 안에서만 필요할 때 적합.
단방향 데이터 흐름 유지:
- 상태는 상위에서 관리되고, 이벤트는 하위에서 상위로 전달.
단점)
복잡한 상태 관리에는 부적합:
- 상태가 여러 컴포저블 간에 공유되어야 하거나, 상태 관리 로직이 많아지면 이벤트 콜백 체인이 길어져 관리가 어려워질 수 있음.
적합한 사용 사례
- 상태가 한 화면 또는 컴포저블 트리 안에서만 필요한 경우.
- 간단한 인터랙션이 필요한 컴포저블 (예: 버튼 클릭, 입력 필드 등).
2. ViewModel
장점)
수명 주기 관리:
- ViewModel은 Compose 트리가 재구성되거나 화면이 회전해도 상태를 유지.
상태 공유 용이:
- 여러 컴포저블 간에 상태를 쉽게 공유할 수 있음.
비즈니스 로직 분리:
- 상태와 UI 로직을 분리하여 코드의 유지보수성과 테스트 가능성 증가.
복잡한 상태 관리에 적합:
- 상태가 많거나 여러 컴포저블 간에 의존성이 있을 때 강력한 도구.
단점)
재 사용성 제한:
- ViewModel은 특정 화면이나 기능에 강하게 결합되므로, 개별 컴포저블의 재사용성이 낮아질 수 있음.
약간의 추가 복잡성:
- ViewModel 설정 및 상태 관리를 위한 추가 코드 필요.
적합한 사용 사례
- 상태가 여러 컴포저블 간에 공유되어야 하는 경우.
- 화면 전환, 회전, 프로세스 종료 등에서도 상태를 유지해야 하는 경우.
- API 호출, 데이터베이스 조회 등 비즈니스 로직이 포함된 상태 관리.
반응형
'코틀린 & 컴포즈 & Java > 컴포즈 Compose' 카테고리의 다른 글
[Compose] Modifier의 위치와 적용 규칙 (0) | 2025.02.05 |
---|---|
[Compose] Modifier란?, Modifier 체이닝 순서 (0) | 2025.02.05 |
[Compose] 코드 작성시 유의할 점 - internal 함수 (0) | 2025.02.05 |
컴포즈(compose) 상호 운용 API 자세히 알아보기 (0) | 2024.02.06 |
컴포즈(compose) 컴포저블 함수 상태 관리 (0) | 2024.01.29 |