Android 99

[다시 만들어보는 클린아키텍쳐] 모듈구성 편

밑작업이 끝이 났다면 이제 모듈을 구성해봐야한다.아직 만들고 있는 샘플 프로젝트는 모듈구성을 대략적으로 해뒀지만 완성된건 아니라계속 바뀌는 중이다. 그러니 대충 일반적인 상황을 가정하고 설명을 해보겠다. 일단 클린아키텍쳐의 개념에 따르는 모듈 구성은 알고자한다면 그 개념부터 다시 알고 넘어가야한다.사실 예전에 포스팅한게 있어서 첨부한다 ㅎhttps://choi-dev.tistory.com/158 안드로이드 클린 아키텍쳐에 대해개발에 관심을 가지고 있는 사람이라면 클린 아키텍쳐라는 말을 한번 쯤 들어 봤을거라고 생각한다. 나도 개념에 대해서는 어럼풋이 알고 있었지만 흉내만 낼뿐 원칙을 완벽하게 지킨다거나 하choi-dev.tistory.com 핵심은 계층분리다.영역을 역할에 따라 분리하고간섭을 최소화하여 ..

Android 2024.08.12

[다시 만들어보는 클린아키텍쳐] build-logic 편

build-logic 도 이전 포스팅에 있었던 모듈의 하나다.다만 이 모듈에는 Version Catalog, Convention Plugin 이라는 개념을 추가해서 설명할것이다. Version Catalog는 이름에서 느껴지는것처럼 버전을 관리해준다. 즉 프로젝트 전반에 있는 라이브러리 의존성을 관리하는 방식이다.libs.versions.tomi 라는 파일이 있을텐데 요놈이 그 역할을 한다.알아본김에 좀 더 알아보자.이 파일을 열어보면 크게 네 파트로 나뉘는데 [versions][libraries][plugins][bundles]가 있다. versions : 라이브러리의 버전을 정의한다. ex) glide = 5.0.0libaries : 해당 라이브러리 정보를 적는다. ( group : name : ve..

Android 2024.07.31

[다시 만들어보는 클린아키텍쳐] 모듈분리 편

클린아키텍쳐가 유행한지도 이제 꽤 시간이 지난 것 같다.하지만 여전히 현업에서도 많이 쓰이고 있고 시간이 흐를수록 더 관리하기 편하고깔끔한 구조로 변화해가는듯하다. 최근에 보이는 nowinandroid 나 드로이드나이츠 앱을 참고하며 내가 필요한 부분만 취해서새롭게 샘플앱을 구성해보려한다. 단발성으로 끝나는것이 아닌 지속적으로 몇년이고 업데이트 할 사항이 생긴다면추가하고 리펙토링도 진행하며 관리해나갈 목적으로 레포를 만들었다. 그럼 프로젝트를 구성하는 첫번째 발걸음인 모듈 분리를 해보자.참고로 클린아키텍쳐라고 꼭 모듈을 분리해야하는건 아니다.다만 분리를 하면 좀 더 강력하게 코드 관심사를 분리 시킬 수 있다.초기에 설정해야하는 일들이 꽤나 복잡하지만 해두고나면 코드를 보기에도 훨씬 편하다. 모듈분리 모듈..

Android 2024.07.25

안드로이드 키보드 높이 구하기

키보드가 올라왔을때 키보드 위로 특정 레이아웃을 올리고 싶을때가 있다.매니페스트 파일이나 코드상으로 넣어도 화면 구조상 어려워서 원하는대로 동작하지 않을때가 있는데  아래와 같은 방법으로 해결 할 수 있다. 화면의 적당한 곳에 아래 코드를 적어준다. 이 코드를 Fragment 에서 사용했을때 기준이다.ViewCompat.setOnApplyWindowInsetsListener(requireActivity().window.decorView.rootView) { _, insets -> val sysBarInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val imeHeight = insets.getInsets(WindowInsetsCo..

Android 2024.04.29

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

2024.04.21 - [Android/Android Compose] - 컴포즈의 Side-Effect 형제들에 대해서 알아보자 - 1 컴포즈의 Side-Effect 형제들에 대해서 알아보자 - 1컴포즈에는 side effect 라는 개념이 존재한다. 단어의 원래 뜻은 부작용이라는 뜻인데 왜 이런 명칭을 붙였는지 의아하긴 했는데 찾아보니 composable 은 단방향으로 state 를 전달하는게 기본인데 전choi-dev.tistory.com이전 글에 이어서 알아보자. 이번에는 DisposableEffect SideEffect 이렇게 알아볼 예정이다. DisposableEffect  는 앞글에서 봤던 LaunchedEffect 와 비슷하지만 취소됐을때 onDispose 가 호출된다.취소될때의 동작을 추가..

컴포즈의 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을 유용하게 써먹을 수 있는데 너무 대충 그렸지만 아래 같은 느낌으로 컴포지션로컬의 영역에 있는 컴포저블끼리는 하위에서 상위 노드의 상태에 접근하도록 제공..

DeepDive Android

새로 카테고리를 만들었다. 안드로이드 개발자랍시고 습관적으로 사용하는 것들이 어떻게 내부적으로 동작하는지 모르고 사용하던 나의 무지함을 조금이라도 덜어내기 위해 처음부터 공부한다는 마음으로 내부 코드들을 깊게 들여다보고 이해하기 위해 만들어진 카테고리다. 잘못 이해하는것도 있고 완벽하게 이해하지 못하는 것도 있겠지만 원리를 이해하려는 노력들이 적힐 예정이다.

스와이프 삭제 구현

이미 쓴 글이 있지만 솔직히 너무 별로라서 새로 만들어봤다. (솔직히 내가 만들어놓고도 이건 좀.. 하고 있었음) 2024.01.14 - [Android/Android Compose] - [안드로이드 컴포즈] 스와이프 삭제 구현 핵심 키워드는 DraggableAnchors, AnchoredDraggableState 이고 구현에 관심이 있다면 위 검색어로 찾아보면 훨씬 쉽고 자연스럽게 뚝딱하고 만들 수 있다. @OptIn(ExperimentalFoundationApi::class) @Composable fun SwipeScreen( contentComposable: @Composable () -> Unit, buttonComposable: @Composable () -> Unit, buttonModifie..