코틀린 & 컴포즈 & Java/컴포즈 Compose

[Compose] Compose에서 =와 by의 차이 (kotilin 동일)

코딩하는후운 2025. 2. 5. 18:16
반응형

= 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> 객체를 직접 넘겨야 하는 경우 =를 사용해야 한다!

반응형