Android

    [Kotlin] 함수형 프로그래밍

    📌 함수형 프로그래밍 위키 백과에는, 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임이라 적혀있습니다. 수학적 계산이라 함은, 식으로 표현할 수 있다는 것이고, 이는 같은 값을 넣었을 때는 항상 같은 결과가 나온다는 것 인데요. 이것을 프로그래밍적으로 해결하기 위해 순수 함수와 일급 객체를 사용합니다. 그렇다면 순수 함수와 일급 객체는 무엇일까요? 📒 순수 함수 순수 함수란 같은 인자에 대하여 항상 같은 결과를 반환하며, 외부의 인자를 변경하지 않는 함수입니다. 순수 함수와 비순수 함수의 예시를 보며 비교해봅시다. 순수 함수의 예 fun sum(a: Int, b: Int) = a + b 비순수 함수의 예 var c = 100 fun sum(a: Int, b:..

    [Kotlin] Coroutine 연습 문제

    Coroutine을 공부하면서, 문서를 꼼꼼히 읽어봐도 실전에서는 분명 헷갈리는 부분이 적지 않았다. 그래서 다시 Unit Test를 통하여 연습하던 중에, 이를 문제 - 정답 형식의 문서로 작성해두면 좋을 것 같아 남기게 되었다. 🤔 Coroutine 연습문제 Unit Test 내에서의 결과이기 때문에 상대적으로 긴 런타임을 가지는 실제 상황과는 다른 결과가 나타날 수 있습니다. 그러나 오히려 그렇기에 공부하기에는 더 확실한 방법이므로, 출력의 보장 결과 여부는 Unit Test Runtime 기준으로 합니다. 🕐 문제 1. 출력 결과를 예상하시오. class ExampleUnitTest { @Test fun assert_test() { runBlocking { println("start") /** A..

    [Android/문제 해결] java.lang.illegalArgumentException: Unexpected char 0xxxxx at Number in ~ Error

    📌 illegalArgumentException: Unexpected char 에러에 대한 처리 나의 경우 안드로이드에서 Multipart Upload를 시행 중 위의 에러를 겪었는데, 결과적으로는 이런 에러가 떠주어서 정말 고맙다는 생각까지 하게 되었다. 만약 이런 에러가 뜨지 않았다면, 비정상적인 결과를 보고 대체 어디서 에러가 난것인지 찾느라 몇 달을 밤새야 했을 것이니.. 심지어 업로드하는 대상에 따라서 간헐적으로 뜨는 에러이기도 했다. 에러 문구 그대로, 정상적인 작업(여기서는 업로드)을 진행 불가능하게 만드는 어떤 텍스트가 존재한다고 알려주는 것이다. 단순 텍스트로는 보이지 않아도 업로드를 위해 인코딩되거나 할 때, 개행 문자로 바뀌거나 다른 의미있는 문자로 바뀌게 되어 원치않은 데이터가 보내..

    [Android/문제 해결] java.lang.IllegalArgumentException: You must call this method on the main thread In Kotlin

    📌 Glide works with background thread Glide에서 BItmap을 얻고자 하는 등의 행위를 할 때, background thread 내에서 작업하라는 에러 문구가 등장합니다. 이는 사실 공식 문서에서 가이드를 제공 중입니다. Ref) 아래는 kotlin 내에서 이를 구현했을 때의 모습입니다 Glide.with(context) .asBitmap() .load(url) .into(object: CustomTarget() { override fun onLoadCleared(placeholder: Drawable?) { // 아래 resource가 들어간 뷰가 사라지는 등의 경우의 처리 } override fun onResourceReady(resource: Bitmap, trans..

    [Android/kotlin] Layout Margin dp 단위 변경하기

    📌 Layout Margin dp 단위 변경하기 fun View.margin(left: Float? = null, top: Float? = null, right: Float? = null, bottom: Float? = null) { layoutParams { left?.run { leftMargin = dpToPx(this) } top?.run { topMargin = dpToPx(this) } right?.run { rightMargin = dpToPx(this) } bottom?.run { bottomMargin = dpToPx(this) } } } inline fun View.layoutParams(block: T.() -> Unit) { if (layoutParams is T) block(lay..

    [Android] What is LiveData

    📌 LiveData = 생명주기(LifeCycle)를 알고 있으며, 데이터를 들고 있는 클래스 (Data Holder Class) 📓 데이터를 들고있는 이유 LifeCycleOwner의 LifeCycle에 따라 이 데이터를 처리함으로써 여러 이점을 확보하기 위해서. 📒 LifeCycleOwner란 안드로이드 생명주기 (Android LifeCycle)를 알고 있는 클래스라 보면 된다. 메소드가 오직 getLifeCycle() 밖에 없는 단일 메소드 인터페이스 클래스이며, Activity나 Fragment에서 이를 상속하고 있다. 즉 저 둘은 LifeCycleOwner이기도 하다는 것이다. (26.1 버전 이상, 그전에는 직접 implements 해야함) 한 마디로 LiveData의 observer 메소드..

    [Android/kotlin] ktlint 설치

    📌 Ktlint 설치 kotlin 언어로 코드를 작성하다 보면, 작성 표준에 잘 맞추어 작성하고 있는지 궁금할 때가 있다. 이는 구글 공식 가이드라인과 kotlin 공식 가이드라인이 존재하기 때문에, 이 문서들로도 해결된다. 그러나 실제로 코드를 짜다보면, 이를 간과하고 작성하게 되는 부분이 많다. 하지만 ktlint를 사용하게 되면, 작성한 코드에 대해 검사를 실시해주어 곧바로 수정이 가능하다. 또한 지속적으로 자각하여 코딩을 진행할 수 있게 된다. 📍 코드 검사 예시 > Task :app:ktlint ../Adapter.kt:3:1: Imports must be ordered in lexicographic order without any empty lines in-between ../Adapter.k..

    [안드로이드/font] 폰트 추천 2. Praktika

    https://www.dafont.com/praktika.font Praktika Font | dafont.com Note of the author Praktika Light is a sample of the complete 40 font grotesk family with widths from condensed to extended. www.dafont.com 유료 폰트 (Light 버전은 무료) 0. 한장 소개 어느 앱을 까다가 발견한 폰트인데, 숫자와 영어만 적용 가능한 폰트이다. 숫자가 매우 digitalic하게 보이고, 영어 또한 숫자와 어울려서 매우 맘에 들어서 알아보았더니 유료 폰트..ㅠ 그래서 비슷한 걸 알아보고 있다.