반응형

Android 35

[Android] LiveData setValue(), postValue() deep dive

개요 LiveData는 수명 주기를 인식하는 Observable data holder class 이다. LiveData는 몇 가지 특성을 갖고 있다. 데이터를 보유할 수 있다. 또한, 모든 유형의 데이터에 사용할 수 있는 Wrapper class이다. Observable 하다. LiveData 객체에서 보유한 데이터가 변경되면 관찰자에게 알림이 제공된다. 수명 주기를 인식한다. LiveData에 관찰자를 연결하면, 관찰자는 LifecycleOwner(일반적으로 Activity 또는 Fragment)와 연결된다. LiveData는 STARTED, RESUMED와 같은 활성 수명 주기 상태인 관찰자만 업데이트 한다. LiveData 객체의 setValue(), postValue() postValue() 작업..

Foundation/Android 2024.02.11

[Android] ViewModel이 Configuration Change에서도 유지되는 이유

주의 : 글이 깁니다. 티스토리는 코드 가독성이 매우 떨어집니다. 편집기에 복사해서 보시는 걸 추천합니다. 개요 안드로이드를 개발하는 방법이 다양해지면서 .xml로 앱을 만들어 봤고, Compose를 사용해서 앱을 만들고도 있습니다. View를 그리는 방법과 ViewModel에서 데이터를 홀드하는 방법이 다양해졌는데, 제 생각에 그 중에서 ViewModel이 유일하게 기존에 사용법과 동일한 사용법으로 안드로이드 개발에서 사용되고 있다고 생각됩니다. 물론 구글에서 동일하게 사용할 수 있도록 작업을 해주셨기에 가능한 일이겠지만, 이런 ViewModel을 조금 더 자세히 알고 싶어졌습니다. ViewModel의 Lifecycle과 흔히 Configuration Change가 발생하더라도 데이터를 유지할 수 있기..

Foundation/Android 2023.12.04

[RxJava] Observable, Single, Completable

Observable Single Completable Observable RxJava에서 Observer는 Observable을 구독한다. (예를 들어 ViewModel에서 어떤 API를 호출하면 ViewModel이 Observer 역할을 하고, API의 Response가 Observable이 된다.) 가장 기본적인 형태이며 연속적인 값을 emit 하면 그 값을 모두 구독해서 호출부에서 받을 수 있다. Emitter Event onNext : 정상적으로 emit한 값을 받을 때 호출되는 함수. onComplete : Observable 구독을 종료하면 호출되는 함수. onError : Observable 구독 중 에러가 발생하면 호출되는 함수. Single Observable과 달리 연속적인 값이 아닌 ..

Mobile/RxJava 2023.10.18

[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에서 ..

[RxJava] flatMap, concatMap, switchMap

Observable transformation flatMap() concatMap() switchMap() Conclusion Observable transformation 현재 구독 중인 Observable 객체가 있고 이 객체의 결과 값을 변환해야 하는 경우가 종종 있다. 반드시 확장하고 더 풍부한 객체를 만들기 위함이 아니라, Observable 객체에서 반환되는 각각의 요소들을 merge 하는 과정을 거쳐 이러한 작업을 수행할 수도 있다. flatMap() flatMap() 메서드는 Original Observable 함수에서 새로운 Observable 함수를 생성한다. Original Observable에 적용된 결과를 Merge하여 내보낸다. 값을 변환하는 중 새로운 값이 앞으로 끼어들 수 있..

Mobile/RxJava 2023.07.26

[Android] What is Gradle?

What is Gradle? Gradle은 거의 모든 유형의 소프트웨어를 빌드할 수 있을 정도로 유연한 오픈 소스 빌드 자동화 도구이다.Gradle은 무엇을 구축하려고 하는지 또는 어떻게 구축해야 하는지에 대해 몇 가지 가정을 한다. 이러한 가정이 Gradle을 특히 유연하게 만든다. 안드로이드 스튜디오는 빌드 자동화 도구로 Gradle을 사용한다. 안드로이드 스튜디오에서 실제 빌드는 Gradle이 한다. Gradle은 다음과 같은 일을 한다. Compile : 리소스 및 소스 코드를 컴파일한다. (In Android, Kotlin, Java 코드 → 바이트 코드) Packaging : 코드를 패키징해서 aab, apk 파일로 만들어 준다. Test : 테스트 환경을 구축하고 지원한다. Deploy & ..

Foundation/Android 2023.04.19

[Android] Dive into concept of Android Context. (Application Context and Context)

목차 Context 정의 Context Tree Activity Context, Application Context Activity Context Application Context Context 사용 Context 사용과 메모리 누수 1. static 변수에 ActivityContext 사용 2. singleton 객체에서 ActivityContext 참조 Context 정의 애플리케이션 환경에 대한 전반적인 정보를 담고 있는 인터페이스이다. 여기서 전반적인 정보란, 애플리케이션의 리소스 파일 혹은 View에 대한 정보 등을 포함한다. Context에 쓰임은 주로 activityContext, applicationContext와 같이 사용된다. Context Tree Context는 abstract c..

[Android] Support different screen size. (큰 화면, 작은 화면 사이즈 대응)

이 글은 Compose를 사용하고 Bottom Navigation을 사용할 때 화면 사이즈에 대한 UI 구성을 부드럽게 하기 위한 간단한 예제이다. 이 예제는 Compose를 사용하였습니다. 이 글은 PC로 보는 것을 권장합니다. 1. Dependency 추가 Material3 Library Window Size Class를 사용하면 기기 화면 사이즈를 구할 수 있다. 실제 기기 사이즈와 앱 스크린 사이즈는 다를 수 있다. 출처 : https://developer.android.com/jetpack/androidx/releases/compose-material3?hl=ko 2. Code calculateWindowSizeClass()를 통해 window width size를 구할 수 있다. HomeScr..

[Android] Jetpack Compose 개념

Introduce Jetpack Compose는 Android를 위한 현대적인 선언형 UI 도구 키트이다. 더 적은 수의 코드, 강력한 도구, 직관적인 Kotlin API로 Android에서의 UI 개발을 간소화하고 가속화하여 앱에 생동감을 더해준다. 코드 감소 직관적 빠른 개발 과정 강력한 성능 간단한 Composable 함수 Compose를 사용하면 데이터를 받아서 UI 요소를 내보내는 Composable function 집합을 정의하여 사용자 인터페이스를 빌드할 수 있다. @Composable 주석이 있어야 함수가 데이터를 UI로 변환하기 위한 함수라는 것을 Compose 컴파일러에게 알릴 수 있다. 함수는 데이터를 받는다. 매개변수가 있을 수 있으며 이를 통해 앱 로직이 UI를 형성할 수 있다. ..

Foundation/Android 2023.01.29

[Android] Concept of DI Hilt. Dive into Hilt Components.

Component Hierarchy 기존 Dagger와 달리 Hilt 사용자는 Dagger의 Components를 직접 정의하거나 인스턴스화하지 않는다. 대신 Hilt는 사용자를 위해 생성되는 미리 정의된 Components를 제공한다. Hilt는 안드로이드 애플리케이션의 다양한 라이프 사이클에 맞춰 자동으로 통합되는 Components(및 해당 Scope Annotaion) 세트가 제공된다. 아래 Diagram은 Hilt Component의 계층 구성도를 보여준다. 각 Component의 주석은 해당 Component의 수명으로 바인딩 범위를 지정하는 데 사용되는 범위 지정 주석이다. Component의 화살표는 하위 Components를 가리킨다. 일반적으로 하위 Components의 바인딩은 상위 ..