Android/Jetpack Compose 6

[Jetpack Compose] 안정성 어노테이션에 대하여...

https://getstream.io/blog/jetpack-compose-stability/해당 포스트를 내 마음대로 정리한 글이다. 더 자세한 내용을 알고 싶다면 이 포스트를 읽어보자! 여러 안드로이드 프로젝트의 코드를 들여다보면서 @Stable, @Immutable과 같은 어노테이션을 많이 마주치곤 했다.하지만 그 둘의 차이점과 동작 방식을 몰라 코드를 온전히 이해할 수 없었다. 그러다 최근에 진행 중인 프로젝트에서 팀원이 안정성 어노테이션을 사용하는 것을 보았고, 이제는 제대로 짚고 넘어가야겠다 싶어 안정성과 어노테이션에 대해 알아보았다. 이 글에선 안정성 어노테이션만을 다루고자 했지만, 온전히 이해하기 위해선 Compose 안정성에 대한 이해가 바탕에 있어야 하기에 때문에 안정성에 관한 설명도 ..

[Jetpack Compose] derivedStateOf에 대하여...

[Medium] Jetpack Compose - When shoul I use derivedStateOf?해당 포스트를 내 마음대로 해석한 글이다.derivedStateOf란?derivedStateOf를 사용하면 계산에 사용된 상태 중 하나가 변경될 때마다 계산을 실행한다.하지만 계산된 값이 기존 값과 동일한 경우 컴포즈 상태 스냅샷 시스템에서 상태 변경으로 간주하지 않아 리컴포지션 이벤트를 발생시키지 않는다고 한다. derivedStateOf는 상태값이 UI보다 더 자주 업데이트돼야 하는 경우에 사용해야 한다. 왜냐하면 입력이 바뀌어 derivedStateOf가 다시 계산되더라도, 결과가 같으면 리컴포지션이 일어나지 않기 때문이다. 예시를 하나 보자. 아이디를 입력하는 TextField와 아이디가 유효..

[Jetpack Compose] CompositionLocal에 대하여...

CompositionLocal이란?Composable 트리의 최상단에서 상태를 관리하기 위해 소개된 개념 상태 호이스팅 (State Hoisting)컴포저블 함수는 트리 구조로 조직된다. 먼저 등장하는 컴포저블이 상위, 그 다음이 하위가 된다.상태를 트리의 가능한 가장 상위 노드에 선언하여 관리하는 것이 상태 호이스팅이며, 컴포즈에서 권장되는 패턴이다.특정 상태가 여러 컴포넌트에서 필요한 경우, 그 모든 컴포넌트들의 접점이 되는 상위 컴포넌트에서 관리함으로써 재사용성을 높임여러 컴포넌트들이 하나의 상태를 참조함으로써, UI의 일관성을 유지할 수 있음상태 변경 로직을 한 곳에 집중시킬 수 있음. 이를 통해 가독성을 향상시키고, 상태 변경에 따른 부수 효과(Side-Effects)도 관리하기 쉬워짐하위 컴포..

[Jetpack Compose] State Holder로 상태관리하기

컴포즈에서 UI의 상태를 관리하다보면, 상태값을 어디에서 관리해야 하는지 굉장히 헷갈린다. 상태 호이스팅을 통해 최대한 공통되는 Composable 함수로 끌어올려서 Stateful한 컴포저블을 최소화하는 건 좋지만, 이렇게 만들어진 Stateful한 컴포저블에 지나치게 많은 상태가 포함되는 일이 발생한다. 그렇다고 뷰모델에 넣기엔 UI에 대한 정보를 지나치게 많이 포함하게 된다. 뷰모델은 비즈니스 로직에 집중해야 한다. 컴포즈에선 이러한 문제를 해결하기 위해 상태 홀더(state holder) 클래스 사용을 추천한다.컴포저블에 UI 요소의 하나 또는 여러 개의 상태 필드가 사용되는 복잡한 UI 로직이 포함되어 있다면 상태 홀더 클래스로 그 책임을 위임해야 합니다. 이렇게 하면 컴포저블의 로직을 격리된 ..

[Jetpack Compose] NavigationBar 탐구하기

개인 프로젝트를 진행할 땐 디자인을 신경쓰지 않다보니 안드로이드가 제공하는 NavigationBar를 사용하여 바텀바를 구성하곤 했습니다. 하지만 디자이너가 가세한 프로젝트에서, 쌤들이 열심히 만들어주신 디자인을 최대한 반영하고자 노력했어요. 그 과정에서 MaterialDesign3 디자인을 따른 NavigationBar를 탐구하게 되었고 이 글을 작성하게 되었습니다. NavigationBar가 뭔데?NavigationBar는 화면의 최하단에 위치하며, 일관적이고 편리한 화면 전환 방법을 제공하는 패턴입니다.네비게이션 사진주로 3개에서 5개의 화면 아이템을 포함하며, 이를 넘어갈 경우 5번째 화면을 더보기로 표시하는게 일반적입니다. Material Design 3 NavigationBar의 스펙구글은 안..

[Jetpack Compose] 수정자, Modifier

다음은 안드로이드 공식 문서에 나온 Modifier에 대한 설명입니다.수정자는 컴포저블을 장식하거나 강화하기 위해 사용되는 기능으로, 수정자를 통해 다음과 같은 종류의 작업을 실행할 수 있습니다.- 컴포저블의 크기, 레이아웃, 동작 및 모양 변경- 접근성 라벨과 같은 정보 추가- 사용자 입력 처리- 요소를 클릭 가능, 스크롤 가능, 드래그 가능 또는 확대/축소 가능하게 만드는 높은 수준의 상호작용 추가  즉, 어떤 컴포저블의 속성을 다루기 위해 사용되는 표준 코틀린 객체입니다. 사용 예시를 한 번 봅시다:@Composableprivate fun Greeting(name: String) { Column( modifier = Modifier .padding(24.dp) ..