본문 바로가기

Android51

[Image] JPEG, PNG, BMP, GIF, SVG, Webp에 대해 알아보자 각 이미지 타입에 대해 알기 전 먼저 알아야할 몇 가지 요소에 대해 정리하고 넘어가보겠습니다. 1. Lossless(무손실) & Lossy(손실) Lossless: 이미지를 압축해도 이미지의 Quality는 손상되지 않는 것 Lossy: 이미지를 압축하여 크기를 줄이지만 이미지의 Quality는 손상되는 것, 만약 이미지를 손실 압축 포맷으로 변환하여 계속해서 저장하게 되면 이미지의 퀄리티는 점점 나빠짐 2. Indexed color & Direct Color Indexed Color: 제작자에 의해 Color Map이라는 곳에 제한된 수의 색상 (256가지의 색상)을 가진 Palette로만 저장할 수 있는 속성 Direct Color: 제작자가 직접 선택하지 않은 수천가지의 컬러를 저장할 수 있는 속성.. 2023. 2. 11.
[Android] BaseFragment 만들기 문제 배경 Android에서 Binding을 처리할 때는 항상 연결과 해제를 구현해줘야 합니다. class TestFragment : Fragment() { private lateinit var _binding: FragmentTestBinding val binding: FragmentTestBinding get() = _binding!! override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ) { _binding = DataBindingUtil.inflate(inflater, R.layout.fragment_test, container, false) return bindi.. 2023. 2. 2.
[Android] Gradle을 KTS로 마이그레이션 하기 Kotlin-dsl? 저는 지금까지 Groovy 기반의 gradle파일들로 라이브러리를 선언하고, project단위의 gradle에서 각 라이브러리 버전을 관리했었는데 Groovy 기반이 아니라 Kotlin 파일로 gradle을 관리할 수 있다는 것을 알게 되었습니다. Groovy -> KTS로 migration하는 방법을 소개하고 있습니다. DSL? Domain Specific Language의 약자이며, 반대 의미로는 GPL Global Purpose Language가 있습니다. 특정 도메인에 국한되어 사용되는 언어라는 의미이며, Kotlin이 이런 DSL에 해당합니다. 앱을 개발하면서 프레임워크나 라이브러리를 사용할 때, 제공되는 언어를 사용하게 되는데 이 때의 언어가 DSL입니다. Groovy v.. 2023. 2. 2.
[Android] OkHttp Interceptor로 서버 Response 변형하기 문제 배경 대부분 어플리케이션을 만들 때 서버와 API통신을 하며 json을 주고받고 있습니다. 클라이언트와 서버 사이의 API 데이터에는 서버 통신이 잘 되었는지, 응답이 잘 갔는지, 잘못된 형태로 보내진 건 아닌지에 대해 확인하기 위해 resultCode, message, data와 같은 형식으로 제공되며 data는 정말 다양한 형식으로 올 수 있습니다. 예전의 저는 api 데이터를 받기 위해 항상 아래와 같은 data class를 매번 생성해주곤 했습니다. data class ServerResponse { val resultCode: String, val message: String, val data: ServerData } data class ServerData { val id: Long, val.. 2022. 12. 22.
[Android] 에뮬레이터에서 localhost 접속하기 문제 배경 이번에 Network 관련 작업을 위해 localhost로 API를 만들고 연결하는 과정에서 문제가 발생했습니다. 서버의 Base Url을 http://localhost로 작성했더니 인식하지 못하는 문제였습니다. 문제 해결 안드로이드 공식 홈페이지 네트워킹 설정 을 보면 아래와 같은 표를 확인할 수 있습니다. 즉 localhost 의 형태가 아닌 http://10.0.2.2로 접근해야 에뮬레이터에서 인식하게 됩니다. 2022. 12. 22.
[Coil] 이미지 로딩 속도 체크하기 .listener를 붙여서 시간을 측정하면 됩니다. Log.d("ImageProcessTime", "$funcName Coil 시작") val coilStartTime = System.currentTimeMillis() imageView.load(imageUrl) { crossfade(true) listener { request, result -> val coilEndTime = System.currentTimeMillis() Log.d("ImageProcessTime", "$funcName processTime: ${(coilEndTime - coilStartTime) / 1000}") } } 2022. 12. 4.
[Glide] 이미지 로딩 속도 체크하기 .listener를 붙여서 RequestListener 구현 -> onResourceReady 안에서 준비완료된 시간을 측정하면 됩니다. val glideStartTime = System.currentTimeMillis() Glide.with(this) .load(imageUrl) .listener(object : RequestListener { override fun onLoadFailed( e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean, ): Boolean { return false } override fun onResourceReady( resource: Drawable?, model: Any?, target: .. 2022. 12. 4.
[Image Loader Library] Glide VS Coil 알아보자! Android를 사용하는 많은 분들은 이미지 로딩을 처리할 때 Glide를 사용할 것이라고 생각합니다. 그래서 오늘은 새로운 Coil에 대해 소개해보고자 합니다! 1. Coil은 뭐지?? Coil은 Coroutine Image Loader의 약자로 Kotlin Coroutine으로 만들어진 가벼운 Android 이미지 로딩 라이브러리입니다. 코일에서는 총 4가지 장점을 위주로 소개하고 있습니다. Fast Coil performs a number of optimizations including memory and disk caching, downsampling the image in memory, automatically pausing/cancelling requests, and more. 코일은 메모리 .. 2022. 12. 4.
[Android] AAC ViewModel 과 MVVM ViewModel MVVM ViewModel이란? MVVM 패턴 (Model - View - ViewModel)은 MVP 패턴에서 파생된 패턴입니다. MVVM 패턴의 목표는 비즈니스 로직과 프레젠테이션 로직을 UI로 부터 분리하는 것입니다. 비즈니스 로직과 프레젠테이션 로직을 UI로 부터 분리하게 되면 테스트, 유지 보수, 재사용 측면에서 용이합니다. 기존의 MVP 패턴 (View - Presenter - Model)에서 View와 Presenter는 1:1 관계로 View에서 요청한 정보로 Model을 가공하여 View에 전달해줍니다. 즉 연결다리 역할을 하는 것입니다. 이러면 View와 Presenter 사이의 의존성이 높아져 문제가 발생합니다. 반대로 MVVM 패턴은 View 와 ViewModel 사이의 의존성이 없.. 2022. 9. 28.