안드로이드 컴포즈 8

컴포즈의 Side-Effect 형제들에 대해서 알아보자 - 1

컴포즈에는 side effect 라는 개념이 존재한다. 단어의 원래 뜻은 부작용이라는 뜻인데 왜 이런 명칭을 붙였는지 의아하긴 했는데 찾아보니 composable 은 단방향으로 state 를 전달하는게 기본인데 전달되는 방향 반대로 상태를 변경해야하는 상황도 지원하기 위해 side effect 라는 개념을 도입했기 때문에 이런 이름이 붙었다고 한다. 요약을 해보자면 side effect 는 Composable 에서 자신이 아닌 외부의 상태에 영향을 발생시키는 것이겠다. 보통 flow 를 사용해서 특정 이벤트를 collect 하면 외부의 상태를 변경하는 경우가 일반적인 예라고 할 수 있겠다. Side Effect 를 지원하기 위한 다양한 API LaunchedEffect rememberCoroutineSc..

Jetpack Compose CompositionLocal 에 대해 알아봅시다

컴포즈를 사용하다보면 종종 CompositionLocal 을 마주치곤 한다. 테마를 커스텀하고 싶을때 사용하곤 했는데 CompositionLocal 은 어떻게 동작하길래 테마 커스텀에서 사용됐는지 개념을 알아보자. CompositionLocal 이 필요한 이유 컴포저블 함수들은 트리형태로 구성된다. 그래서 상태의 관리를 편하게 하기 위해서 보통 상태 호이스팅이라는 개념으로 상위 노드에서 관리하고 하위 노드로 전파한다. 그런데 극단적으로 트리의 깊이가 100개면 어떨까. 이 상태를 아래까지 다 전파하는건 쉽지 않을거다. 이때 CompositionLocal을 유용하게 써먹을 수 있는데 너무 대충 그렸지만 아래 같은 느낌으로 컴포지션로컬의 영역에 있는 컴포저블끼리는 하위에서 상위 노드의 상태에 접근하도록 제공..

[안드로이드 컴포즈] 스와이프 삭제 구현

안드로이드 컴포즈에는 SwipeToDismiss 라는게 이미 만들어져 있다. 레이아웃을 옆으로 밀면 밀어낸 반대 방향에 버튼이 생기는 레이아웃 같은걸 만들때 쓴다. 하지만? 나는 또 다른 디자인으로 만들고 싶었다. 찾아보면 이걸 사용해서도 방법은 있겠지만 그냥 내가 생각나는대로 만드는게 빠를거 같아서 만들어봤다. 혹시나 구글이 준비해준 SwipeToDismiss 가 맘에 안드는 사람들에게 귀찮음을 덜어줄 수 있었으면 한다. 만드려는 레이아웃은 이렇다. 순서는 아래와 같다. 1. 스와이프 했음을 인지하는 방법 2. 스와이프한 값을 이용해서 컴포넌트를 스와이프 한 방향으로 옮기는 방법 3. 삭제 버튼을 나오게 하는 방법 @OptIn(ExperimentalMaterial3Api::class) @Composab..

Jetpack Compose 에서 Lifecycle 관리하기

컴포즈를 사용하면 기존 Lifecycle 을 이용할때랑 같은 방식으로 작동하지가 않는다. 조금 다른 방식을 사용해야하는데 컴포즈에서 말하는 부수효과에 대한 이해가 필요하다. https://developer.android.com/jetpack/compose/side-effects?hl=ko Compose의 부수 효과 | Jetpack Compose | Android Developers Compose의 부수 효과 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 부수 효과는 구성 가능한 함수의 범위 밖에서 발생하는 앱 상태에 관한 변경사항입니다. developer.android.com 위 링크에 DisposableEffect 에 대해 예시를 들때 아래 코드와 비슷한 예제가 나온다..

안드로이드 컴포즈 1주차 정리

1주차 코드랩에서는 기존 view 의 리사이클러뷰에 버튼이 달려있고 버튼을 누르면 레이아웃이 늘어나는 간단한 앱을 만드는 것이였습니다. 위 이미지는 코드랩에 예시로 있던 이미지인데 제가 만든것과는 조금 다르지만 거의 비슷합니다. 진행하면서 저는 제 맘대로 조금씩 변경해가면서 만들어 봤는데요. 일단 코드 전문부터 보시죠. class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Week1JetpackComposeBasics2Theme { // A surface container using the 'backgr..

안드로이드 컴포즈 - GDG DevFest2021 참여하다.

GDG Korea Android 에서 진행하는 DevFest 2021 Android Compose 에 참여하게 됐습니다. https://sites.google.com/view/devfest-korea-2021/compose-codelab Devfest Korea 2021 - Compose Codelab 🤔 Jetpack Compose를 배워야 하는지 고민이신가요? sites.google.com 이 사이트에서 참여를 받았었는데 지금은 이벤트 참여는 끝났지만 그래도 공부는 같이 할 수 있으니 컴포즈에 관심이 있으면 참고하면 좋을거 같습니다. 위 사이트에서는 코드랩을 진행하기 위한 참고영상으로 보면 좋을거 같고 뛰어난 국내 개발자분들이 친절하게 설명해주신다. 실제 코드랩은 https://developer.an..

Android Compose - 컴포즈의 매력을 직접 느껴보자

뭔가 특정 기능에 대한 내용도 아니고 그냥 컴포즈의 멋짐에 대해서 설명하고 싶어서 고민하던 끝에 제목을 이렇게 지었습니다. 일단 바로 코드부터 소개해보겠습니다 @Composable fun MycomposeableView(){ Scaffold { Column( Modifier .verticalScroll(rememberScrollState()) .padding(50.dp) ) { for(i in 1..30){ Greeting("Android") } } } } @Composable fun Greeting(name: String) { Text(text = "Hello $name!") Spacer(modifier = Modifier.size(20.dp)) } 저번 포스팅에 있던 코드를 약간 수정해봤습니다. 그리..

Android Compose 는 무엇일까?

안드로이드 컴포즈는 2018년 구글 io 에서 처음 공개됐고 3년간의 제작기간을 거쳐서 최근에 공개됐다고 합니다. 아니 그전에 컴포즈가 뭐냐구요? 선언적 UI 를 안드로이드에서 사용하게 해주는 멋진 친구입니다. 선언적 UI 는 모바일 크로스플랫폼에서 보였었는데 저는 이게 선언적 UI 인지도 모르고 있었으나 컴포즈를 접하면서 아 이거 플러터나 리액트네이티브에서 봤던거랑 비슷하네? 라고 생각하면서 알게 됐습니다. 선언적 UI 는 말그대로 UI를 코드상에 직접 선언합니다. 기존 안드로이드는 xml 을 통해서 view 를 그리는 방식으로 id를 통해 연결하거나 데이터바인딩을 이용해서 UI 를 처리했었죠. 안드로이드를 조금이라도 해보신 분들은 다 아실거라고 생각합니다. 그러나 컴포즈는 그것과는 다르니 이름도 다르..