안드로이드 (50) 썸네일형 리스트형 WorkManager(feat.Hilt) Background Task백그라운드 작업을 선택할 때 위와 같이 조건에 따라 API를 선택할 수 있다.WorkManager특징1. 제약 조건Wifi 상태에서 작업 실행배터리 충전 중일 경우 실행기기가 유휴 상태일 경우…다양한 조건을 설정하여 조건에 맞는 경우 작업을 실행할 수 있다.2. 작업 예약 관리일회성 또는 반복적으로 실행할 작업을 예약할 수 있다.작업 그룹을 함께 모니터링하거나 취소할 수 있다.예약된 작업은 내부적으로 관리되는 SQLite 데이터베이스에 저장되며 WorkManager에서 기기를 재부팅해도 작업이 유지되고 다시 예약되도록 보장절전 기능을 사용하고 권장사항(Doze Mode)을 준수배터리 소모를 우려하지 않아도 됨3. 신속 처리 작업백그라운드에서 즉시 실행할 작업을 예약할 수 있다... Data Layer DataSource네트워크, 로컬 DB, 파일, 메모리 등에서 데이터를 제공한다.데이터와 직접적인 연관이 있는 클래스이기 때문에 해당 클래스에서는 CRUD의 기능만 담당한다. DataSource 클래스에서는 하나의 데이터 저장소만 사용해야 한다.예를 들어, 네트워크 통신 DataSource에는 네트워크 통신과 관련 된 기능만 존재해야 한다.class NewsRemoteDataSource( private val newsApi: NewsApi, private val ioDispatcher: CoroutineDispatcher) { /** * Fetches the latest news from the network and returns the result. * This executes .. SOILD 원칙 1. 단일 책임 원칙 (SRP)각 클래스는 하나의 책임만 갖고 있어야 한다.책임 별로 클래스를 분리함으로써 각 책임에 변경사항이 발생될 때만 해당 클래스만 변경하면 된다. 적용 전class 회사{ fun 영업(){...} fun 개발(){...} fun 인사(){...}} 적용 후class 영업{ fun 업무(){...}}class 개발{ fun 업무(){...}}class 인사{ fun 업무(){...}} 안드로이드에서의 SRP1. ViewModel은 UI 데이터 상태를 관리하는 역할로만 사용한다. 2. 개방 폐쇄 원칙 (OCP)확장에는 열려있고, 변경에는 닫혀 있어야 한다.하나의 기능을 갖고 있지만 여러가지 경우에 따라 작업이 달라지는 경우라면 메서드가 복잡해지거나, .. SingleTon Singleton Pattern오직 하나의 인스턴스만 제공하는 클래스 Why?하나의 클래스를 여러 곳에서 사용하다보면 불필요하게 여러 개의 동일한 클래스가 생성되어 메모리 낭비가 일어날 수 있다.또는 setting과 같이 인스턴스가 하나여야만 하는 클래스가 있을 수 있다. 따라서 어디서 사용되어도 동일한 기능을 제공하는 클래스라면 불필요하게 여러 개의 인스턴스를 생성할 필요 없이 하나의 인스턴스만 제공하면 효율적으로 메모리를 사용할 수 있게 된다.class Test{ companion object { private var instance: Test? = null fun getInstance(): Test{ return instance ?: Single.. 이미지 캐싱 이미지를 로딩할 때마다 서버에서 불러온다면 네트워크 요청이 자주 발생하게 되고, 이로 인하여 앱의 성능이 저하될 수 있다.이를 개선하기 위해 Cache를 사용하는데, 한 번 불러온 이미지를 Cache에 저장하여 여러번 사용되는 이미지에 대해 네트워크 요청을 줄이고, 빠르게 불러와 데이터 로딩 속도를 줄여 앱의 성능을 향상 시킬 수 있다. 이미지를 사용할 때 주로 사용하는 라이브러리인 Glide와 Coin 등에서는 이러한 기능들을 제공해주기 때문에 따로 설정할 필요는 없지만 어떻게 캐싱을 하는지는 알고 있어야 한다. 캐싱의 종류1. 메모리 캐싱메모리 캐싱은 말 그대로 메모리에 캐싱을 저장하여 보다 빠르게 접근할 수 있지만 휘발성이며, 메모리라는 제한으로 인해 많은 데이터를 저장할 수 없다는 특징을 갖고 있.. WorkManager 앱 종료 상황에서 동작 WorkManager는 로그인 상태에서 동작하고 비회원일 땐 동작하지 않아야 하기에 로그인 성공한 시점에 한 번 등록하게 구현하였다. 다만 테스트를 위해 Application에서 WorkManager를 등록하여 테스트를 하던 도중 발생한 문제이다. 처음 나의 예상은 앱을 실행 > 특정 시간에 작업 수행이었고 앱을 킨 상태에서는 문제 없이 동작하였다.그러나 WorkManager를 쓰는 이유, 앱이 종료 된 상태에서도 돌아가야 한다. 따라서 앱을 실행하여 WorkManager에 등록 후 앱을 종료하고 트리거 시간까지 기다려보았다.당연히 동작하지 않아서 로그를 찍어보았는데 특정 시간이 되면 다시 WorkManager를 등록하여 기존의 작업이 취소되는 문제가 있었다. 분석여기서 유추할 수 있는 부분은 앱이 종료.. Service Locator Service Locator 방식은 수동으로 의존성을 주입해주는 방식이다.위와 같이 각 클래스를 ServiceLocator 클래스에 정의해둔 뒤, 싱글톤인 Application 클래스에 초기화 해주고 Application에서 가져다가 직접 주입해주는 방법으로 이루어진다. class Aclass Bclass Cclass ServiceLocator{ private val a = A() private val b = B() private val c = C() fun getA() = a fun getB() = b fun getC() = c}class MyApplication: Application() { override fun onCreate() { super.onCreate() s.. 이미지 리사이징 ✅ 이미지 리사이징현재 카메라로 사진을 찍고 앱에 저장하면 사진 하나에 3MB로 앱의 사이즈가 지속적으로 커지는 문제가 있다.서버에 저장한다고 해도 여러 사용자가 하나의 3MB의 사진을 올린다? 누가봐도 문제가 있어 보인다.사진 하나의 용량이 큰 이유는 아래와 같다.일반적으로 촬영되어 저장된 사진의 경우 카메라 촬영 시 한 장의 이미지가 아닌 순간적으로 여러 장의 이미지를 합성하여 화질을 개선해주는 솔루션을 사용하고 있으며, 일반 사진 모드는 화면 비율에 따라 차이가 있을 수 있지만 일반적으로 3:4 화면 비율 기준 약 2 ~ 3MB 정도의 사진 크기로 저장되며, 고화소(50/108MP) 사진 촬영의 경우 약 20 ~ 30MB 정도의 사진 크기로 저장되고 있습니다.https://r1.community.s.. Recomposition 기존의 다른 함수들과는 다르게 Compoable 함수는 한 번 호출되어 Composition이 발생된 이후에도 재생성 될 수 있는데, 이를 Recomposition이라고 한다.Recomposition 발생 이유1. Composable 함수의 매개변수 변경@Composablefun UserPofile(name: String, phone: String) {...}2. 관찰 중인 State의 변경var text by rembember { mutableStateOf("") }Compose 데이터 타입Composable 함수의 매개변수 데이터는 두 가지의 타입으로 분류할 수 있다.1. Stable원시 타입 (Primitive Types)lamda 함수외부의 참조 데이터가 없을 경우참조 데이터가 Stable 한 경.. Compose 동작 원리 Compose 구조 1. Compose CompilerCompose Runtime이 수행하기 적합한 형태의 코드로 변환순수한 Kotlin으로 작성된 Kotlin 컴파일러 플러그인Compose 컴파일러 > 런타임 과정에서 FIR(Frontend Intermediate Representation)을 통해 개발자가 작성한 코드를 정적 분석 및 수정 가능2. Compose RuntimeCompose Compiler에서 넘어온 코드를 바탕으로 UI에서 활용할 수 있도록 관리Gap Buffer 자료구조에서 파생 된 Slot Table에서 상태를 저장 및 관리Composable 함수에 대한 실질적인 생명주기 관리 및 UI에 대한 정보를 담고 있는 메모리 표현3. Compose UICompose Runtime의 데이터.. 이전 1 2 3 4 5 다음 목록 더보기