본문 바로가기

안드로이드

(45)
이미지 리사이징 ✅ 이미지 리사이징현재 카메라로 사진을 찍고 앱에 저장하면 사진 하나에 3MB로 앱의 사이즈가 지속적으로 커지는 문제가 있다.서버에 저장한다고 해도 여러 사용자가 하나의 3MB의 사진을 올린다? 누가봐도 문제가 있어 보인다.사진 하나의 용량이 큰 이유는 아래와 같다.일반적으로 촬영되어 저장된 사진의 경우 카메라 촬영 시 한 장의 이미지가 아닌 순간적으로 여러 장의 이미지를 합성하여 화질을 개선해주는 솔루션을 사용하고 있으며, 일반 사진 모드는 화면 비율에 따라 차이가 있을 수 있지만 일반적으로 3:4 화면 비율 기준 약 2 ~ 3MB 정도의 사진 크기로 저장되며, 고화소(50/108MP) 사진 촬영의 경우 약 20 ~ 30MB 정도의 사진 크기로 저장되고 있습니다.https://r1.community.s..
WorkManager(feat.Hilt) Background Task백그라운드 작업을 선택할 때 위와 같이 조건에 따라 API를 선택할 수 있다.WorkManager특징1. 제약 조건Wifi 상태에서 작업 실행배터리 충전 중일 경우 실행기기가 유휴 상태일 경우…다양한 조건을 설정하여 조건에 맞는 경우 작업을 실행할 수 있다.2. 작업 예약 관리일회성 또는 반복적으로 실행할 작업을 예약할 수 있다.작업 그룹을 함께 모니터링하거나 취소할 수 있다.예약된 작업은 내부적으로 관리되는 SQLite 데이터베이스에 저장되며 WorkManager에서 기기를 재부팅해도 작업이 유지되고 다시 예약되도록 보장절전 기능을 사용하고 권장사항(Doze Mode)을 준수배터리 소모를 우려하지 않아도 됨3. 신속 처리 작업백그라운드에서 즉시 실행할 작업을 예약할 수 있다...
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의 데이터..
SearchView SearchView는 검색창을 구현할 때 사용한다. 보통 사용 유형은 Toolbar와 함께 사용하거나, SearchView를 따로 사용하는 유형이 있다. 1. SearchView iconifiedByDefault true : 아이콘 상태 >> 클릭 시 입력창 표시false : 항상 입력창 표시 binding.searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{ override fun onQueryTextSubmit(query: String?): Boolean { // TODO Enter 입력 시 호출되는 함수 binding.searchView.c..
TimePicker TimePicker는 말 그대로 시간을 설정할 때 사용한다. 갤럭시 알림 앱에 시간을 선택하는 창이 대표적인 예이다. 사용 방법xml timePickerMode : TimePicker의 형태를 결정한다.clock : 아날로그 시계spinner : 디지털theme : TimePicker의 디자인 디자인 설정하는 방법우선 themes.xml에서 TimePicker 디자인에 대한 설정을 해주어야 한다. themes.xml...... timepicker.xml  textSize : 글씨 크기textColorPrimary : 글씨 색상colorControlNormal : 언더 바 색상android:color/transparent : 부모 색과 같게 설정, 투명이라고 보면 됨 데이터 처리val cal = Calen..
[Layout] CoordinatorLayout CoordinatorLayout 이란?위와 같이 Title과 같은 Toolbar를 상단에 크게 구성하며, 스크롤 시 Title만 남기고 나머지는 사라지는 효과를 주는 레이아웃이다. 반대로 스크롤하면 다시 나타난다. 구조 CoordinatorLayout의 구조는 위와 같다. 1. AppBarLayout: Toolbar를 포함한 상단을 다양한 방법으로 크게 구성하고 싶을 때 사용하는 레이아웃주로 이미지와 toobar를 조합하여 사용한다.  ex) 넷플릭스  app:fitsSystemWindows : 가능한 영역까지 확장해주는 기능    2. CollapsingToolbarLayout: 스크롤 시 접히는 부분으로 해당 레이아웃에서 고정 View를 제외한 나머지 View들은 스크롤 시 사라진다.AppBarLay..
[안드로이드] 안드로이드 버전과 SDK 안드로이드 버전 Windows 버전과 마찬가지로 안드로이드 또한 OS 버전이 존재한다. 안드로이드 버전에 맞춰 SDK(API Level) 또한 업데이트 되며, 버전마다 사용할 수 있는 기능들이 달라지게 된다. 때문에 이전 버전에서 잘 되던 기능이 다음 버전에서 안되는 경우 또한 발생하기도 한다. 안드로이드 버전은 핸드폰 설정 > 휴대전화 정보 > 소프트웨어 정보에서 확인할 수 있으며, S24 기준 안드로이드 14 버전이 설치되어 있다. S23의 경우 출시 당시 13에서 현재는 14로 업데이트 되었다. SDK SDK란 Software Development Kit의 약자로 소프트웨어 개발 도구로 사용되고 있다. SDK에는 개발을 하는데 필요한 각종 코드와 문서들이 포함되어 있다. 안드로이드 프로젝트에 bui..
[안드로이드] Hilt Hilt는 DI 라이브러리 중 하나로 기존에 존재하던 의존성 주입 라이브러리인 Dagger를 보다 쉽게 사용할 수 있도록 만든 도구입니다. Hilt의 목표 Android App을 위한 Dagger 관련 인프라 간소화 표준화 된 컴포넌트 세트와 스코프로 앱 간의 설정, 가독성 및 이해도, 코드 공유를 쉽게 만들기 앱 간의 설정, 가독성 및 코드 공유를 용이하게 하기 위한 표준 컴포넌트 및 스코프 생성 쉬운 방법으로 다양한 빌드 타입에 대해 다른 바인딩 제공 특징 Dagger2 기반 라이브러리 표준화된 Dagger2 사용법 제시 보일러플레이트 코드 감소 프로젝트 설정 간소화 쉬운 모듈 탐색과 통합 개선된 테스트 환경 Android Studio의 지원 AndroidX 라이브러리의 호환 종속 항목 추가 buil..
[안드로이드] Dependency Injection (DI) DI는 Dependency Injection의 약자로 의존성 주입이라고 한다. 의존성이란? 의존성은 하나의 클래스에서 다른 객체를 참조하는 것을 말한다. 다음 예시를 보면 class A { val B_Class = B() } class B { ... } 클래스 A가 B를 참조하고 있다. 이때 우리는 클래스 A가 B를 의존하고 있다고 한다. DI (의존성 주입) 의존성이 높으면 유지보수 및 테스트가 어려워진다. 따라서 클래스 내부에서 객체를 참조하는 것이 아닌 외부에서 참조시켜주는 것을 의존성 주입, DI라고 한다. 방법은 다음과 같다. A, B 클래스 외의 새로운 매개체를 하나 생성한 뒤, 그 매개체를 통해서 의존성을 관리해주는 것이다. 이 매개체를 Inversion Of Control ( IOC ) 이..