Android Compose Spotless

이미지
사용 언어: Kotlin 1.9.22 사용 버전: Android Studio Iguana 2023.2.1 Patch 1 안드로이드 컴포즈 Spotless를 알아보겠습니다. Spotless는 여러 명의 개발자가 작업할 때, Code(코드) convention(규칙)을 정하여 지키도록 할 때 사용합니다. 공식 레포지토리입니다. https://github.com/diffplug/spotless 여러 언어를 지원합니다. 사용법을 봅시다! https://github.com/diffplug/spotless/blob/main/plugin-gradle/README.md#quickstart Project 용 build.gradle에 id("com.diffplug.spotless") version "6.25.0"를 추가해 줍니다. Sync now를 눌러줍니다. App 용 build.gradle로 갑니다. plugins에 id("com.diffplug.spotless")를 적어줍니다. Sync now 후, 아래에 spotless를 적어줍니다. 아래 plugin 관련 문서가 있습니다. https://github.com/diffplug/spotless/tree/main/plugin-gradle 문서에서 Kotlin은 ktfmt, ktlint, diktat, prettier를 지원해 줍니다. 우리는 pinterest에서 만든 ktlint를 사용할 겁니다. https://github.com/pinterest/ktlint Quick start에 있는 것을 따라 해 봅시다. 우리의 app 용 build.gradle을 이렇게 만들어 줍니다. Sync now를 눌러주세요. 그 후, 몇몇 설정을 위해서  EditorConfig File을 만듭니다. Project를 선택하고, 우클릭 - New - EditorConfig File을 누릅니다. OK를 눌러줍니다. .editorconfig에 이렇게 적어줍니다. Terminal을 열어서 .\gradl

Android Accessibility: Semantics

이미지
안드로이드 Accessibility: Semantics를 알아보겠습니다. 출처: https://developer.android.com/jetpack/compose/semantics Composition(컴포지션)은 앱의 UI(유아이)를 설명하고 composables(컴포져블)를 실행하여 UI를 만듭니다. Composition은 tree(트리) 구조이고, UI를 설명하는 요소로 구성되어 있습니다. Composition 옆에는 비슷한 병렬구조의 Semantics(의미) tree가 있습니다. 이 tree는 UI를 Accessibility(접근성) 서비스와 테스트 framework(프레임워크)에 다른 방식으로 설명합니다. Accessibility 서비스는 tree를 이용하여 특별한 요구사항으로 사용자에게 설명합니다. 테스트 framework는 앱과 상호작용하며 assertions(어썰션)에 이용합니다. Semantics tree는 UI를 어떻게 그려야 하는지에 대한 정보를 포함하고 있지 않습니다. 대신 당신의 composables의 semantic meaning(의미)을 가집니다. 만약 당신의 앱이 composables로 구성되어 있고, Compose(컴포즈) 기초와 material library를 사용하여 변경을 시키게 된다면, Semantics tree는 자동으로 채워져서 생성될 것입니다. 그러나, 당신이 custom(사용자가 수정한) 한 low-level(낮은 수준)의 composables를 추가한다면, 당신은 수동으로 semantics를 추가해야 합니다. 이러한 상황에서는 당신의 tree는 올바르지 않거나, 화면의 전체 의미를 대변할 뿐입니다. 이경우 당신은 tree를 변경할 수 있습니다. 아래의 custom된 달력 예시를 보시죠. 이 예시에서 전체 달력은 low-level composable로 사용되었습니다. layout(레이아웃) composable을 사용하여 직접적으로 Canvas(캔버스)에 그렸습니다. 만약 당신이 아무것도 하지 않는다면, accessi

Android Room Relation and Embedded

이미지
사용 언어: Kotlin 1.9.22 사용 버전: Android Studio Iguana 2023.2.1 안드로이드 Room Relation and Embedded를 알아보겠습니다. Room database는 관계형 데이터베이스로 다른 table(테이블)과 상호작용해야 할 때가 있습니다. 이러한 경우 사용할 수 있는 방법이 Intermediate data class와 Multimap return types가 있습니다. Room은 버전 2.4 이상부터는 Multimap return types만 지원합니다. 따라서 여기서는 Multimap return types만 다루도록 하겠습니다. 아래는 공식 문서입니다. https://developer.android.com/training/data-storage/room/relationships Multimap(멀티맵)의 경우 추상화 자료형을 만들어 추가적으로 data(데이터) class(클래스)를 만들 필요가 없어서 좋습니다. 단지 추상화된 map structure만 있으면 됩니다. @Embedded는 다른 data class를 그대로 가져다 쓸 때 사용합니다. 위의 User는 id, firstName, street, state, city, postCode를 가지게 됩니다. @Relation의 경우에는 one-to-one(일 대 일), one-to-many(일 대 다), many-to-many(다 대 다) 관계에 사용됩니다. one-to-one의 경우 쉽습니다. 아래의 data class가 정의되어 있을 때, 두 data를 연결하게 되면 아래와 같이 표현 가능합니다. parentColumn에는 User가 Library를 가지므로 Primary key(기본 키)인 UserId가 적히고, entityColumn에는 자식인 Library의 Foreign key(외래 키)인 userOwnerId가 적힙니다. 그리고 해당 data를 불러오기 위해 Query는 다음과 같이 Transaction을 사용해서 부릅니다. one-to-man