반응형
= vs by의 차이는?
Jetpack Compose에서 =와 by는 상태(state)를 사용하는 방식과 데이터 변경 추적 방식에서 차이가 발생합니다.
이는 Compose에서 상태를 올바르게 관리하고, UI를 효율적으로 갱신하는 데 중요한 개념입니다.
=를 사용하는 경우
=를 사용하면 State 객체 자체를 직접 저장합니다.
var countState: State<Int> = remember { mutableStateOf(0) }
동작 방식:
- countState는 State<Int> 타입이므로, 값을 직접 사용하려면 .value를 통해 접근해야 합니다.
- 즉, UI에서 사용할 때 countState.value를 명시적으로 참조해야 합니다.
예제)
Text(text = "Count: ${countState.value}")
Button(onClick = { countState.value += 1 }) { Text("Increment") }
여기서 .value를 사용하지 않으면 상태 값이 직접 변경되지 않음
by를 사용하는 경우
by는 Compose에서 상태를 자동으로 추적할 수 있도록 도와줍니다.
즉, .value를 직접 사용할 필요 없이 변수 자체가 상태 값처럼 동작합니다.
var count by remember { mutableStateOf(0) }
동작 방식:
- count는 Int 타입이므로 .value 없이 바로 사용할 수 있음.
- Compose는 count가 변경될 때 자동으로 UI를 업데이트함.
예제)
Text(text = "Count: $count")
Button(onClick = { count += 1 }) { Text("Increment") }
여기서는 .value 없이 count 변수를 직접 변경하면 UI가 자동으로 업데이트됨
정리
- Compose에서 =와 by의 차이는 상태 값을 관리하는 방식에 있음.
- = 사용: State<T> 자체를 저장하며, .value를 사용해야 함.
- by 사용: 상태 값을 직접 변수로 다루며, .value 없이 자동 추적 가능.
UI 상태를 간단하게 관리하려면 by를 사용하는 것이 더 편리하지만, State<T> 객체를 직접 넘겨야 하는 경우 =를 사용해야 한다!
반응형
'코틀린 & 컴포즈 & Java > 컴포즈 Compose' 카테고리의 다른 글
[Compose] Paging3 클린 아키텍처 적용하다 의문점 (0) | 2025.02.06 |
---|---|
[Compose] TextField의 여백 문제와 해결 방법 (0) | 2025.02.06 |
[Compose] Modifier의 위치와 적용 규칙 (0) | 2025.02.05 |
[Compose] Modifier란?, Modifier 체이닝 순서 (0) | 2025.02.05 |
[Compose] 컴포즈 코드 작성시 유의할 점(네이밍, 상태, 데이터 전달) (0) | 2025.02.05 |