반응형

Mobile/Android(Kotlin) 45

[Android] Compose TextField

개요 TextField는 유저가 텍스트를 입력할 수 있도록 하는 Composable 함수이다. Composable TextField View에서 EditText를 정의했을 땐, 정의한 후 텍스트 입력이 자유로웠지만, TextField에서 텍스트 입력을 사용하기 위해서는 remember API를 함께 사용해야 한다. 아래 코드 블록과 같이 text에 대한 선언이 없다면 TextField에 Text 입력이 제대로 이루어지지 않는다. var text by remember { mutableStateOf("") } TextField( value = text, onValueChange = { text = it }, ) remember API는 간단하게 이야기하면 포함되어 있는 Composable 함수에 저장되는 변..

[Android] Compose Button

개요 Composable 함수를 사용하여 다양한 Button을 쉽게 만들 수 있다. 버튼은 사용자가 정의된 작업을 트리거할 수 있도록 도와주는 기본 구성요소이다. Composable Button 일반적으로 Button은 onClick 속성과 content 속성을 정의한다. onClick 속성은 모든 버튼이 공통적으로 갖고 있는 속성이며, 여기에 트리거를 정의한다. content 속성은 Composable 함수를 정의하는 람다식으로 Composable Button 안에 contents를 custom 하기 위해 자유롭게 정의할 수 있다. Button(onClick = { /*TODO*/ }) { } Text Button 구현하기 일반적으로 Button 안에 Text를 입력한 형태를 가장 많이 사용한다. Co..

[Android] Compose Text

개요 Android에서 UI를 개발할 때 Text는 꼭 필요한 중요 요소 중의 하나이며, Jetpack Compose를 사용하면 Text를 더 쉽게 표현할 수 있다. Text Text의 text 속성 값은 String 형식이다. 따라서 문자열 변수를 사용하거나 직접 입력이 가능하며, strings.xml에 정의한 속성 역시 사용 가능하다. Column { Text(text = "Hello World") Text(text = stringResource(id = R.string.hello_world)) } String 값과 strings.xml 속성을 사용하는 방법과 결과물이다. 둘 사이의 차이점은 없다. Text Style 색상 변경 Text( text = stringResource(id = R.strin..

[Android] Compose Column (Make a Vertical Layout)

소개 Column Modifier VerticalAlignment Content: @Composable ColumnScope.() -> Unit LazyColumn 예제 소개 Compose로 수직 방향 레이아웃을 구성할 때 사용하는 Layout으로 Column이 있다. 수직 방향 레이아웃을 가진 List를 구현할 때도 Column을 사용하는데, XML View 기반으로 구성할 때 사용하는 RecyclerView와 비교했을 때 굉장히 적은 코드로 리스트를 구성할 수 있다는 장점이 있으며, RecyclerView 기능을 완전히 대체할 수도 있다. Column은 Compose의 기초가 되는 Layout답게 androidx.compose.foundation.layout 패키지에 있다. Column @Compos..

[Android] Hilt @Binds와 @Provides 차이점. (abstract and object)

@Binds @Provides @Binds를 사용할 때 abstract으로 선언하는 이유 예상 @Provides를 사용할 때 object로 선언하는 이유 예상 @Binds constructor를 가질 수 없는 interface의 인스턴스를 제공해야 할 때 사용할 구현을 Hilt에 알려준다. 함수 반환 유형은 함수가 어떤 인터페이스의 인스턴스를 제공하는지 Hilt에 알려준다. 함수 매개변수는 제공할 구현을 Hilt에 알려준다. @Binds를 사용하기 위해서는 module을 abstract class로 bind 함수를 abstract function으로 만들어야 한다는 것에 주의하자. 또한, @Provides와 비교하여 @Binds로 생성된 Hilt 자동 생성 클래스 개수가 더 적다. 구현체에 반드시 @In..

[Android] Dive into Compose Side Effect API. Compose Effect Coroutine Logic.

개요 상태 및 사용 사례 LaunchedEffect : Composable 범위에서 suspend function 실행 LaunchedEffect 예제 rememberCoroutineScope : Composition 인식 범위를 확보하여 Composable 외부에서 코루틴 실행 rememberCoroutineScope 예제 DisposableEffect : 정리가 필요한 Effect DisposableEffect 예제 개요 SideEffect API는 Composable 함수의 범위 밖에서 발생하는 앱 상태에 관한 변경사항이다. Composable의 수명 주기 및 속성으로 인해 SideEffect API는 없는 것이 좋지만, 필요한 경우가 발생한다. 예를 들어 스낵바를 표시하거나 특정 상태 조건에 따라..

[Android] Basic concept of Room Database and Query example

Android Room을 구성하는 세 가지 요소 Data class (Entity) Foreign Key Data access objects (DAO) @Query @Insert @Update @Transaction RoomDatabase class CREATE TABLE DROP TABLE ALTER TABLE INSERT TABLE Android Room을 구성하는 세 가지 요소 data class dao room database Database class에 dao를 선언한다. Database class에 dao를 통해서 데이터베이스 쿼리를 사용할 수 있다. 쿼리 데이터를 data class로 정의할 수 있다. Data class (Entity) 데이터베이스에 테이블을 kotlin android에서 ..

[Android] Compose TabRow, Pager 예제. 화면 탭 버튼 예제

결과물 예시 Add a dependency TabRow Pager 결과물 예시 Add a dependency TabRow는 기본 Compose 프로젝트 안에 들어있지만, Pager는 따로 추가를 해야 한다. 이전에 Pager는 com.google.accompanist dependemcy 안에 있었지만, 현재 compose-foundation으로 이전됐다. 작성일 기준 최신 버전은 1.4.3 버전이다. TabRow TabRow는 Tab button을 활용해서 화면 전환을 할 때 사용할 수 있도록 설계된 Compose 함수이다. XML View를 활용할 때 사용했던 TabLayout과 비슷하다. 사용 방식은 TabRow Compose 함수를 만들고 블럭 안에 forEach 형식으로 필요한 만큼 Tab Com..

[Android] Android Preferences DataStore. ( + RxJava)

목차 소개 Preferences DataStore 및 Proto DataStore Protocol Buffers DataStore 사용 규칙 설정 add a dependency Set a DataStore 일반적인 경우 Read values Write values Collect values RxJava를 사용하는 경우 Read values Set values Observe values Shared Preferences를 Preferences DataStore로 Migration 결론 소개 DataStore는 프로토콜 버퍼를 사용하여 키-값 쌍 또는 유형이 지정된 객체를 저장할 수 있는 데이터 저장소 솔루션이다. DataStore는 Kotlin Coroutine, Flow를 사용하여 비동기적이고 일관된 트..

[Android] Example of WorkManager. (+ RxJava or Coroutine) WorkManager를 사용하는 이유.

목차 소개 WorkManager의 이점 WorkManager가 적합한 작업 Dependency 추가 AndroidManifest.xml 파일 수정 필요한 파일 생성 1. Worker Class 파일을 생성합니다. 2. Module 생성 (Only Koin) 3. Koin Initialize (Only Koin) 4. MainActivity에서 WorkManager 생성 WorkManager를 구성하는 주요 요소 Worker WorkRequest 결론 소개 WorkManager는 상황별 실행과 보장된 실행을 조합하여 적용해야 하는 백그라운드 작업을 위해 권장되는 솔루션입니다. 상황별 실행을 적용하면 WorkManager가 최대한 빨리 백그라운드 작업을 실행합니다. 보장된 실행을 적용하면 WorkManage..