본문 바로가기

분류 전체보기130

[Android] FileProvider 파일 다운로드 및 경로 이슈. (파일 다운로드, Read .PDF 파일) 예상 구현준비 사항Manifest.xml 추가Provider 권한 관련 경로 XML 파일 추가첫 번째 시도두 번째 시도결론예상 구현모바일 기기 저장소에 .pdf 파일을 저장한 후 앱에서 파일의 이름을 추적하여 해당 .pdf 파일을 불러올 수 있다. 해당 기능 구현을 테스트하기 위해서 Test Application이라는 새로운 프로젝트를 생성하였다. 준비 사항오래 전 학생 때 저장소 URI를 통해서 파일에 직접 접근이 가능하던 것이 떠올랐으나, Android SDK 24 버전 이상부터는 File Provider를 사용해서 파일에 접근해야 접근이 가능하도록 설계되었다고 한다. 이 둘의 차이점은 URI 앞부분에서 쉽게 확인할 수 있었다. 변경된 이유 중 한 가지를 예상했을 때 보안에 중점을 둔 조치라고 생각된.. 2023. 10. 18.
[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.. 2023. 10. 14.
[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는 없는 것이 좋지만, 필요한 경우가 발생한다. 예를 들어 스낵바를 표시하거나 특정 상태 조건에 따라.. 2023. 10. 14.
[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에서 .. 2023. 8. 24.
[Android] Compose TabRow, Pager 예제. 화면 탭 버튼 예제 결과물 예시Add a dependencyTabRowPager 결과물 예시 Add a dependencyTabRow는 기본 Compose 프로젝트 안에 들어있지만, Pager는 따로 추가를 해야 한다. 이전에 Pager는 com.google.accompanist dependemcy 안에 있었지만, 현재 compose-foundation으로 이전됐다. 작성일 기준 최신 버전은 1.4.3 버전이다. TabRowTabRow는 Tab button을 활용해서 화면 전환을 할 때 사용할 수 있도록 설계된 Compose 함수이다. XML View를 활용할 때 사용했던 TabLayout과 비슷하다. 사용 방식은 TabRow Compose 함수를 만들고 블럭 안에 forEach 형식으로 필요한 만큼 Tab Compos.. 2023. 7. 30.
[RxJava] flatMap, concatMap, switchMap Observable transformation flatMap() concatMap() switchMap() Conclusion Observable transformation 현재 구독 중인 Observable 객체가 있고 이 객체의 결과 값을 변환해야 하는 경우가 종종 있다. 반드시 확장하고 더 풍부한 객체를 만들기 위함이 아니라, Observable 객체에서 반환되는 각각의 요소들을 merge 하는 과정을 거쳐 이러한 작업을 수행할 수도 있다. flatMap() flatMap() 메서드는 Original Observable 함수에서 새로운 Observable 함수를 생성한다. Original Observable에 적용된 결과를 Merge하여 내보낸다. 값을 변환하는 중 새로운 값이 앞으로 끼어들 수 있.. 2023. 7. 26.
[Kotlin] Dive into Concept of Kotlin Coroutine Context. Dispatchers, Job and Deferred. 소개 Dispatchers Android Dispatchers Dispatchers.Default Dispatchers.IO Dispatchers.IO & Dispatchers.Default Job Deferred Job States 소개 CoroutineContext는 코루틴 실행을 어떻게 할 것인지에 대한 요소들을 결정한다. Coroutine은 항상 Kotlin 표준 라이브러리에 정의된 CoroutineContext 타입의 값으로 표시되는 일부 Context에서 실행된다. CoroutineContext는 다양한 요소의 집합이다. 주요 요소는 Job, Dispathcer, ExceptionHandler 등이 있다. 이러한 요소들은 각각의 키 값을 갖고 있으며, CoroutineContext로 등록된다... 2023. 7. 1.
[Kotlin] Dive into Concept of Kotlin Coroutine and CoroutineContext. (suspend keyword) 소개 CoroutineScope CoroutineContext CoroutineBuilder suspend keyword 예제 Structured concurrency Coroutine continuation 소개 코루틴은 일시 중단이 가능한 계산의 인스턴스이다. 안드로이드의 UI 스레드 실행을 중단시키지 않고 다른 스레드에서 계산을 실행할 수 있다는 점에서 개념적으로 스레드와 유사하다. 그러나 코루틴은 특정 스레드에 바인딩되지 않고, 한 스레드에서 실행을 일시 중단하고 다른 스레드에서 다시 시작할 수 있다. 말이 어려울 수 있다. 중요한 점은 코루틴은 일시 중단이 가능하다는 것이다. Coroutine을 구성하는 요소로 CoroutineScope, CoroutineContext, CoroutineBuil.. 2023. 7. 1.
[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를 사용하여 비동기적이고 일관된 트.. 2023. 6. 8.
반응형